正则表达式表示可以以 0 开头的数字



我为我的字段使用这个正则表达式:

/^([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)- 字符串开头没有两个0s
  • (?!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
}

最新更新