正则表达式的数字可以从0开始

时间:2017-08-23 08:04:02

标签: javascript regex ng-pattern

我在我的领域使用这个正则表达式:

/^([1-9]([0-9]){0,3}?)((\.|\,)\d{1,2})?$/;

我想要做的是允许用户输入0作为数字的开头,但是在这个cas中,他必须输入至少与0不同的第二个数字,同样的规则适用于第三个和第四个位数。

示例:

  • 01 - >有效
  • 00 - >无效
  • 0 - >无效
  • 1 - >有效

简而言之,不得允许零值。我怎么能用Regex做到这一点?或者如果我只是用javascript脚本做它会更好吗?

2 个答案:

答案 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);
}