我正在寻找一个正则表达式,它严格允许两个逗号分隔的浮点数字。
测试用例:
0,0
0.021312311323,0
0,0.012312312312
1.1,0.9836373
我试过的Regex是
^[-+]?([1-8]?d(.d+)?|90(.0+)?),s*[-+]?(180(.0+)?|((1[0-7]d)|([1-9]?d))(.d+)?)$D+|d*.?d+
这些是纬度和经度,但我只想在这些坐标中有两个值。
此正则表达式在以下情况下失败:
-10a, 10a
10a,10b
如果有任何帮助和指导,我将不胜感激。
正则表达式以两个冗余模式结束,应该在$
之后删除D+|d*.?d+
。由于$
意味着字符串的末尾,它后面不能有更多的文本,而D+|d*.?d+
需要一个或多个非数字字符,或者只将任何浮点或整数与d*.?d+
匹配——这与您不受欢迎的字符串相匹配。
你可以使用
^([-+]?(?:[1-8]?d(?:.d+)?|90(?:.0+)?)),s*([-+]?(?:180(?:.0+)?|(?:1[0-7]d|[1-9]?d)(?:.d+)?))$
请参阅regex演示。注意,我将一些捕获组转换为非捕获组,因此只剩下两个"捕获"组;名义上的";捕获模式中的组。
详细信息
^
-字符串的开头([-+]?(?:[1-8]?d(?:.d+)?|90(?:.0+)?))
-第1组:[-+]?
-可选-
或+
(?:[1-8]?d(?:.d+)?|90(?:.0+)?)
-从0到89的数字([1-8]?d
(,然后是可选的小数部分((?:.d+)?
(,或者是90
,然后是一个可选的.
,后面跟着一个或多个0
字符
,s*
-逗号和0+个空白字符([-+]?(?:180(?:.0+)?|(?:1[0-7]d|[1-9]?d)(?:.d+)?))
-第2组:[-+]?
-可选-
或+
(?:180(?:.0+)?|(?:1[0-7]d|[1-9]?d)(?:.d+)?)
-后面跟着可选.
+一个或多个0
字符的180
数字,或者从0到179的数字,然后是可选小数部分
$
—字符串结束
您的正则表达式几乎是正确的。您应该在$
处停止,指示字符串的末尾。
const testCases = [ "0,0",
"0.021312311323,0",
"0,0.012312312312",
"1.1,0.9836373",
"-10a, 10a",
"10a,10b"];
const re = /^[-+]?([1-8]?d(.d+)?|90(.0+)?),s*[-+]?(180(.0+)?|((1[0-7]d)|([1-9]?d))(.d+)?)$/g;
testCases.forEach(tc => {
if(tc.match(re)) {
console.log(" VALID : " + tc );
} else {
console.log("NOT VALID : " + tc);
}
});