无法理解为什么Javascript正则表达式不起作用

Cannot fathom out why Javascript regex not working

本文关键字:Javascript 正则表达式 不起作用 为什么      更新时间:2023-09-26

我想验证一些输入,以检查它是否是格式的正货币值

0.50.555(注意这个)、5.55.5555

我使用的代码是:

  if ($("#gross").val()>0 && !/^'d+?'.?'d?'d$/.test($("#gross").val())) {
    alert($("#gross").val() + " is invalid currency");
  }

它适用于除单个数字以外的所有数字,例如5(和5.),但适用于5.5

我做错了什么?

您忘记在$之前的末尾添加?。更好的方法是:

/^'d+?'.?'d{0,2}$/

这会检查数字最多有两个小数位——如果你想检查任何金额,你可以使用以下内容:

/^(?!'.$)(?:(?!0'd)('d*)'.?('d[0-9]*))$/

请注意,最好显式地将字符串转换为数字,并缓存#gross的值。

var grossVal = $("#gross").val();
if (+grossVal > 0 && !/^'d+?'.?'d{0,2}$/.test(grossVal)) {
    alert(grossVal + " is invalid currency");
}

+?将匹配尽可能少的匹配项,在本例中为1位。

我想你正在寻找这样的东西:

/^'d+('.'d{0,2})?$/

这将是一系列数字,可能后面跟着一个小数,介于0到2位之间。

考虑使用交替将正则表达式分解为a|b|c|d形式。

然后我们可以使用几种不同的形式,比如:

a = 0                       -- 0
b = [1-9]'d*                -- n (non-zero integer), n cannot start with 0
c = 0[.]'d{1,2}             -- 0.x or 0.xy
d = [1-9]'d*[.]'d{1,2}      -- n.x or n.xy, n (non-zero integer)

这将允许我们拒绝像091.这样的值,因为它们不在所接受的任何单个表单中。