0

我正在研究一个文本字段,以使其在任何情况下都只允许最大一个逗号和一个点(最大)的数字。它可以接受像“9.8,8.6”这样的值。它不应一次允许两个或多个点或逗号。

我试过下面的代码,但它不起作用。

this.regex = new RegExp('[\d,]\.?[\d,]*$');
4

1 回答 1

1

您当前的模式有很多可选部分。例如,它还允许使用单个逗号。

如果最大值仅为 1 个逗号和逗号前后每个数字 1 个点,则可以将其设为可选:

^(?:\d+(?:\.\d+)?|\.\d+)(?:,(?:\d+(?:\.\d+)?|\.\d+))*$
  • ^字符串的开始
  • \d+匹配 1+ 个数字
  • (?:\.\d+)*匹配 0+ 次点和 1+ 位
  • (?:非捕获组
    • ,\d+(?:\.\d+)匹配逗号、1+ 位数字和可选的点和 1+ 位数字
  • )?关闭组并使其可选
  • $字符串结束

正则表达式演示

您的代码可能看起来像(注意双重转义反斜杠)

this.regex = new RegExp('^(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:,(?:\\d+(?:\\.\\d+)?|\\.\\d+))*$');

let regex = new RegExp('^(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:,(?:\\d+(?:\\.\\d+)?|\\.\\d+))*$');

[
  "9.8,8.6",
  "9.8",
  "8.2,9",
  "5,9",
  "9.8,8.6,1.1",
  "1,8.6",
  "9.8,8.6,1.1",
  "8,8,8",
  "9.8,8,8",
  "1,1",
  "1,1,.1,1",
].forEach(s => {
  console.log(s + " ==> " + regex.test(s));
});

于 2019-08-05T13:54:11.830 回答