我为我的字段使用这个正则表达式:
/^([1-9]([0-9]){0,3}?)((.|,)d{1,2})?$/;
我想做的是允许用户输入 0 作为数字的开头,但在此 cas,他必须输入至少与 0 不同的第二个数字,并且对第三位和第四位数字应用相同的规则。
例:
- 01 ->有效
- 00 ->无效
- 0 ->无效
- 1 ->有效
简而言之,不能允许零值。如何使用正则表达式执行此操作?或者如果我只用javascript脚本来做会更好吗?
如果您只想匹配小数分隔符之前的部分中有 1 到 4 位数字的数字,以及小数点分隔符后最多 2 位数字的数字(我从您使用的正则表达式中推断出来(并且不以00
开头(该要求来自您的口头解释(,请使用
/^(?!00)(?!0+(?:[.,]0+)?$)d{1,~4}(?:[.,]d{1,2})?$/
请参阅正则表达式演示。
详
^
- 字符串的开头(?!00)
- 字符串开头没有两个0
s(?!0+(?:[.,]0+)?$)
- 一个负的预测,如果存在一个或多个0
,则匹配失败,后跟可选的.
或,
序列,后跟一个或多个零,直到字符串末尾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);
}
尝试将JS和RegEx组合在一起:
if (parseInt(value) != 0 && value.test(/d+([,.]d{1,2})?/)) {
//valid
}