使用 Javascript 无法使 RegEx 模式在 MVC 5 视图中正常工作

Can't get RegEx pattern to work correctly in MVC 5 View using Javascript

这是我的模式。我正在尝试允许数字和两位小数加上一个可选的三位逗号。

var pattern = /^[0-9]+(,\d{3})*\.[0-9]{2}$/;

允许

100,000.12

10,000.12

1,000.12

100.12

10.12

.12(不能让这个允许...见下文)

不允许

abcd

1,000.12

1,00.12

1,000.0

1,000。

1,000

这是测试。如果我加一个?在 [0-9] 之后它在这里工作,但在我的 MVC 5 视图中不起作用。模式打不开,所以 MVC 不喜欢它。

^[0-9]?+(,\d{3})*\.[0-9]{2}$

https://regex101.com/r/HwLS7q/1

更新 1

不允许

000,000.12、0.12 等...

非常感谢任何帮助!谢谢!

[0-9]?+ 是一个匹配 1 或 0 个数字 占有 的模式,不允许回溯到模式中。 JS 正则表达式不支持 possessive quantifiers,因此出现问题。

你需要使用

^[0-9]*(?:,[0-9]{3})*\.[0-9]{2}$

^(?:[0-9]+(?:,[0-9]{3})*)?\.[0-9]{2}$

此处,[0-9]* 匹配零个或多个数字,(?:[0-9]+(?:,[0-9]{3})*)? 匹配可选的 1+ 数字序列,后跟 0+ 重复的 , 和 3 数字组。

参见 this regex demo

一个更精确的模式是将第一个数字块限制为 1、2 或 3 位数字,并使整数部分可选:

^(?:[0-9]{1,3}(?:,[0-9]{3})*)?\.[0-9]{2}$

regex demo

详情

  • ^ - 字符串开头
  • (?:[0-9]{1,3}(?:,[0-9]{3})*)? - 一个可选的序列
    • [0-9]{1,3} - 一到三位数
    • (?:,[0-9]{3})* - 0 次或多次重复
      • , - 逗号
      • [0-9]{3} - 三位数
  • \. - 点
  • [0-9]{2} - 两位数
  • $ - 字符串结尾。