繁体   English   中英

JavaScript的逗号或点的实数的正则表达式

[英]Regular expression for a real number with comma or dot for JavaScript

我想知道我在这段代码中做错了什么来检查实数:

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 不要混合它们。 在你的regexp常量的情况下,选择第二个是更有效的,因为它是预编译的。

请参阅MDN文档

首先,您不需要在不在字符串中的正则表达式上执行new RegExp()

/regexp/rulenew RegExp("regexp", "rule");

其次:

如果你可以使用\\d为什么要使用[0-9]

第三:

你为什么用[.|,] 你想要匹配| 藏汉? [.,]会完成你想要实现的工作。

第四:

检查这个数字字符串:/ /^(?:[1-9]\\d{0,2}(?:,\\d{3})*|0)(?:\\.\\d+)?$/ :[ /^(?:[1-9]\\d{0,2}(?:,\\d{3})*|0)(?:\\.\\d+)?$/ :, /^(?:[1-9]\\d{0,2}(?:,\\d{3})*|0)(?:\\.\\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+)?$/ :[ /^[+-]?(?:[1-9]\\d{0,2}(?:,\\d{3})*|0)(?:\\.\\d+)?$/ :, /^[+-]?(?:[1-9]\\d{0,2}(?:,\\d{3})*|0)(?:\\.\\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) - 你可能意味着(\\.|,) 另外我不确定你是否真的想要匹配没有十进制数字的floas(例如"12," ) - 我省略了它们; 我在开头就允许一个可选的标志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM