如何为文本字段实现正则表达式以在 Extjs 中一次允许一个逗号一个点
How implement regex for a textfield to allow one comma one dot at a time in Extjs
我正在开发一个文本字段,使其在任何情况下都只允许最多有一个逗号和一个点(最大)的数字。它可以接受像“9.8,8.6”这样的值。它不应一次允许两个或多个点或逗号。
我试过下面的代码,但它不起作用。
this.regex = new RegExp('[\d,]\.?[\d,]*$');
您当前的模式有很多可选部分。它还允许例如单个逗号。
如果最多只有 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));
});
我正在开发一个文本字段,使其在任何情况下都只允许最多有一个逗号和一个点(最大)的数字。它可以接受像“9.8,8.6”这样的值。它不应一次允许两个或多个点或逗号。
我试过下面的代码,但它不起作用。
this.regex = new RegExp('[\d,]\.?[\d,]*$');
您当前的模式有很多可选部分。它还允许例如单个逗号。
如果最多只有 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));
});