首页 > 解决方案 > 无法让 RegEx 模式在使用 Javascript 的 MVC 5 View 中正常工作

问题描述

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

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

允许

100,000.12

10,000.12

1,000.12

100.12

10.12

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

不允许

A B C D

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 等...

任何帮助深表感谢!谢谢!

标签: javascriptregexasp.net-mvc-5asp.net-mvc-views

解决方案


[0-9]?+是一个所有格匹配 1 或 0 位的模式,不允许回溯到模式中。JS 正则表达式不支持所有格量​​词,因此存在问题。

你需要使用

^[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 位组。

请参阅此正则表达式演示

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

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

请参阅正则表达式演示

细节

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

推荐阅读