使用 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}$
详情
^
- 字符串开头
(?:[0-9]{1,3}(?:,[0-9]{3})*)?
- 一个可选的序列
[0-9]{1,3}
- 一到三位数
(?:,[0-9]{3})*
- 0 次或多次重复
,
- 逗号
[0-9]{3}
- 三位数
\.
- 点
[0-9]{2}
- 两位数
$
- 字符串结尾。
这是我的模式。我正在尝试允许数字和两位小数加上一个可选的三位逗号。
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}$
详情
^
- 字符串开头(?:[0-9]{1,3}(?:,[0-9]{3})*)?
- 一个可选的序列[0-9]{1,3}
- 一到三位数(?:,[0-9]{3})*
- 0 次或多次重复,
- 逗号[0-9]{3}
- 三位数
\.
- 点[0-9]{2}
- 两位数$
- 字符串结尾。