html 输入的 RegEx 模式验证失败
RegEx Pattern Validations failing on html input
问题:
我正在尝试在输入类型文本 html.
上使用 Regex 模式为测试用例实现以下结果
希望满足以下条件:
仅限数字 - 不允许使用字母或特殊字符
数字之间没有空格
允许小数点后两位数
不能为零 (0)
限制的第一个数字不能为零(例如:01200)
testPattern: RegExp = /(?=.*?\d)^$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?(\.\d{1,2})?$/;
预期结果:
- 0 //假
- 012 // 假
- 0.00 //假
- 0.0 //假
-
- //假
- 00122 //假
- 0.12 //真
- 0.01 //真
- 1,234.00 // 真
- 1.00 //真
- 123,456 //真
- 1.23 // 真
TIA
您可以断言不是以零开头,后面只跟数字,或者只有点、逗号和零,直到字符串结尾。
^(?![0,.]*$|0\d*$)\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$
说明
^
字符串开头
(?!
否定前瞻
[0,.]*$
将可选的零 ,
或 .
匹配到字符串的末尾
|
或
0\d*$
将 0
和可选数字匹配到字符串的末尾
)
关闭前瞻
\d{1,3}
匹配1-3位数字
(?:,\d{3})*
可选择重复匹配 ,
和 3 位数字
(?:\.\d{1,2})?
可选匹配 .
和 1-2 位
$
字符串结束
const regex = /^(?![0,.]*$|0\d*$)\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$/;
[
"0",
"012",
"0.00",
"0.0",
"0.",
"00122",
"0.12",
"0.01",
"1,234.00",
"1.00",
"123,456",
"1.23"
].forEach(s => console.log(`${s} --> ${regex.test(s)}`));
问题: 我正在尝试在输入类型文本 html.
上使用 Regex 模式为测试用例实现以下结果希望满足以下条件:
仅限数字 - 不允许使用字母或特殊字符
数字之间没有空格
允许小数点后两位数
不能为零 (0)
限制的第一个数字不能为零(例如:01200)
testPattern: RegExp = /(?=.*?\d)^$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?(\.\d{1,2})?$/;
预期结果:
- 0 //假
- 012 // 假
- 0.00 //假
- 0.0 //假
-
- //假
- 00122 //假
- 0.12 //真
- 0.01 //真
- 1,234.00 // 真
- 1.00 //真
- 123,456 //真
- 1.23 // 真
TIA
您可以断言不是以零开头,后面只跟数字,或者只有点、逗号和零,直到字符串结尾。
^(?![0,.]*$|0\d*$)\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$
说明
^
字符串开头(?!
否定前瞻[0,.]*$
将可选的零,
或.
匹配到字符串的末尾|
或0\d*$
将0
和可选数字匹配到字符串的末尾
)
关闭前瞻\d{1,3}
匹配1-3位数字(?:,\d{3})*
可选择重复匹配,
和 3 位数字(?:\.\d{1,2})?
可选匹配.
和 1-2 位$
字符串结束
const regex = /^(?![0,.]*$|0\d*$)\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$/;
[
"0",
"012",
"0.00",
"0.0",
"0.",
"00122",
"0.12",
"0.01",
"1,234.00",
"1.00",
"123,456",
"1.23"
].forEach(s => console.log(`${s} --> ${regex.test(s)}`));