我在我的领域使用这个正则表达式:
/^([1-9]([0-9]){0,3}?)((\.|\,)\d{1,2})?$/;
我想要做的是允许用户输入0作为数字的开头,但是在这个cas中,他必须输入至少与0不同的第二个数字,同样的规则适用于第三个和第四个位数。
示例:
简而言之,不得允许零值。我怎么能用Regex做到这一点?或者如果我只是用javascript脚本做它会更好吗?
答案 0 :(得分:1)
尝试组合JS和RegEx:
if (parseInt(value) != 0 && value.test(/\d+([,.]\d{1,2})?/)) {
//valid
}
答案 1 :(得分:1)
如果您只想匹配小数分隔符前面的部分中包含1到4位数字的数字,并且小数点分隔符后面最多2位数字(我从您使用的正则表达式中推断出它)和不以00
开头(该要求来自您的口头解释),请使用
/^(?!00)(?!0+(?:[.,]0+)?$)\d{1,~4}(?:[.,]\d{1,2})?$/
请参阅regex demo。
<强>详情
^
- 字符串开头(?!00)
- 字符串开头没有两个0
(?!0+(?:[.,]0+)?$)
- 如果有一个或多个0
s,则会出现一个否定前瞻的否定前瞻,然后是.
或,
的可选序列,后跟一个或更多零到字符串结尾\d{1,4}
- 任意1到4位数字(?:[.,]\d{1,2})?
- 1次或0次出现
[.,]
- .
或,
\d{1,2}
- 任意1或2位数字$
- 字符串结束。JS演示:
var ss = ['1','1.1','01','01.3','023.45','0','00','0.0','0.00','0001'];
var rx = /^(?!00)(?!0+(?:[.,]0+)?$)\d{1,4}(?:[.,]\d{1,2})?$/;
for (var s of ss) {
var result = rx.test(s);
console.log(s, "=>", result);
}