我想知道我在检查实数的代码中做错了什么:
var regex = new RegExp(/([0-9]+[\.|,][0-9]*)|([0-9]*[\.|,][0-9]+)|([0-9]+)/g);
var invalid = this.value.match(regex);
以上对我不起作用,而表达式
([0-9]+[\.|,][0-9]*)|([0-9]*[\.|,][0-9]+)|([0-9]+)
在测试仪中工作。
我想知道我在检查实数的代码中做错了什么:
var regex = new RegExp(/([0-9]+[\.|,][0-9]*)|([0-9]*[\.|,][0-9]+)|([0-9]+)/g);
var invalid = this.value.match(regex);
以上对我不起作用,而表达式
([0-9]+[\.|,][0-9]*)|([0-9]*[\.|,][0-9]+)|([0-9]+)
在测试仪中工作。
做
var regex = new RegExp("([0-9]+[.|,][0-9])|([0-9][.|,][0-9]+)|([0-9]+)/g);([0-9]+[.|,][0-9])|([0-9][.|,][0-9]+)|([0-9]+)", 'g');
或者
var regex = /([0-9]+[.|,][0-9])|([0-9][.|,][0-9]+)|([0-9]+)/g;
两种构造是可能的:new RegExp(string,'g')
或/somestring/g
。不要混合它们。在您使用常量正则表达式的情况下,选择第二个会更有效,因为它是预编译的。
请参阅MDN 文档
首先,您不需要对new RegExp()
不在字符串中的正则表达式执行操作。
/regexp/rule
或者new RegExp("regexp", "rule");
其次:
[0-9]
如果可以使用,为什么要使用\d
?
第三:
你为什么用[.|,]
?你想匹配吗?也?[.,]
会做你想要完成的工作。
第四:
对照数字字符串检查:/^(?:[1-9]\d{0,2}(?:,\d{3})*|0)(?:\.\d+)?$/
你可以这样做:
var regexp = /^(?:[1-9]\d{0,2}(?:,\d{3})*|0)(?:\.\d+)?$/;
alert(regexp.test("0")); // true
alert(regexp.test("1")); // true
alert(regexp.test("01")); // false (or check out the regex at the bottom)
alert(regexp.test("123")); // true
alert(regexp.test("1234")); // false
alert(regexp.test("123,4")); // false
alert(regexp.test("123,456,789,012")); // true
alert(regexp.test("123,456,789,012.")); // false
alert(regexp.test("123,456,789,012.12341324")); // true
alert(regexp.test("0.12341324")); // true
如果你想匹配类似 0,000,000.0000 的东西,你可以使用这个正则表达式:
/^\d{1,3}(?:,\d{3})*(?:\.\d+)?$/
如果您想要 +- 在前面,您可以添加 Bergi 提到的内容。我的正则表达式将如下所示:
/^[+-]?\d{1,3}(?:,\d{3})*(?:\.\d+)?$/
或者:/^[+-]?(?:[1-9]\d{0,2}(?:,\d{3})*|0)(?:\.\d+)?$/
正如Bergi所说,你应该知道如何拥有。作为分组运算符和 , 作为分隔符。为此,您只需要替换,
为\.
和\.
,
有替换 , 和 的表达式。
/^?\d{1,3}(?:\.\d{3})*(?:,\d+)?$/ <- matches 00,000,000.00000
/^?(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d+)?$/ <- matches 1,123,123,123.1234
/^[+-]?\d{1,3}(?:\.\d{3})*(?:,\d+)?$/ <- matches -00,000.0
/^[+-]?(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d+)?$/ <- matches -12,123.12345
我建议这样做:
/[+-]?(?:\d*[.,])?\d+/
它使用快捷方式\d
而不是[0-9]
,而且我认为您不想将管道匹配为小数分隔符。方括号定义了一个字符类,其中特殊字符失去了它们的含义(.
不需要转义,|
不意味着 OR) - 你可能是指(\.|,)
. 另外我不确定你是否真的想匹配没有十进制数字的浮点数(例如"12,"
) - 我已经省略了它们;并且我在开始时允许使用可选符号。