请教一个正则。

xiatianlong
  • 2.2k

请填入数字或数字范围,数字范围用短折现隔开。例如“7”、“7.8”、“7.8-8.8”

回复
阅读 2.1k
2 个回答
同意并接受
  • 7.2k
✓ 已被采纳
/^(?:\d|(?:[1-9]\d+))(?:\.(?:\d+)?)?(-(?:\d|(?:[1-9]\d+))(?:\.(?:\d+)?)?)?$/
var regx = /^(?:\d|(?:[1-9]\d+))(?:\.(?:\d+)?)?(-(?:\d|(?:[1-9]\d+))(?:\.(?:\d+)?)?)?$/
arr=['0','0.','0.0','0.1','01','0..','.0','01.0','000','123','0-0','0.-0.','0.0-0.0','0.1-0.5','01-02','0..-0..','.0-.0','01.0-02.0','000-123','123-456','7.1-9.5']
arr.forEach(function(s){console.log((s+'          ').substr(0,10), regx.test(s)?'√':'×')})
0          √
0.         √
0.0        √
0.1        √
01         ×
0..        ×
.0         ×
01.0       ×
000        ×
123        √
0-0        √
0.-0.      √
0.0-0.0    √
0.1-0.5    √
01-02      ×
0..-0..    ×
.0-.0      ×
01.0-02.0  ×
000-123    ×
123-456    √
7.1-9.5    √
songjz
  • 2.3k

以下这个正则表达式表示输入整数或小数,比如 01.12,012 都是非法的

var reg = /^(((?!0)\d+|0)|((?!0)\d+|0)\.\d+)$/
reg.test('0.12')

基于这个修改

var r2 = /^(((?!0)\d+|0)|((?!0)\d+|0)\.\d+)(-(((?!0)\d+|0)|((?!0)\d+|0)\.\d+))?$/
r2.test('7.8-8.8')

当然你也可以 split('-') 之后数组每一项都满足整数或小数的正则表达式且数组长度是 1 或 2

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏