html 输入的 RegEx 模式验证失败

RegEx Pattern Validations failing on html input

问题: 我正在尝试在输入类型文本 html.

上使用 Regex 模式为测试用例实现以下结果

希望满足以下条件:

  1. 仅限数字 - 不允许使用字母或特殊字符

  2. 数字之间没有空格

  3. 允许小数点后两位数

  4. 不能为零 (0)

  5. 限制的第一个数字不能为零(例如:01200)

    testPattern: RegExp = /(?=.*?\d)^$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?(\.\d{1,2})?$/;

预期结果:

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 位
  • $ 字符串结束

Regex demo

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)}`));