2014-11-06 55 views
1

我在正则表达式中是这样一个newb,但仍然...
我基于我的测试this后。正则表达式在JavaScript中检查纬度/经度

我有这个简单的regex:

^-?([1]?[1-7][1-9]|[1]?[1-8][0]|[1-9]?[0-9])\.{1}\d{1,6} 

Debuggex,如果我88.5例如测试它,它匹配。

在我的JS文件,我有:

var lonRegex = new RegExp("^-?([1-8]?[1-9]|[1-9]0)\.{1}\d{1,6}"); 
var check = lonRegex.test(88.5); // hardcoded for demo 
console.log(check) // output false 

我无法猜测为什么它总是返回我的假,无论值是一个数字或像“88.5”的字符串。

+0

这有事情做与如何正则表达式的部分从字符串创建一个正则表达式对象时被转义。 '/^- ?([1-8]?[1-9] | [1-9] 0)\。{1} \ d {1,6} /。test(88.5)'将返回'true' – lxe 2014-11-06 23:34:24

+1

不要从字符串构造正则表达式,只需使用正则表达式('/.../')。另外,不要用正则表达式检查数字,只需用算术检查它们。 – 2014-11-07 03:46:36

回答

1

从字符串创建RegExp对象时,您需要转义某些字符。从MDN

当使用构造函数时,正常字符串转义规则(前面带\的特殊字符包含在字符串中)是必需的。

在你的情况,这将工作(注意双\为\ d和。):

var lonRegex = new RegExp("^-?([1-8]?[1-9]|[1-9]0)\\.{1}\\d{1,6}"); 
var check = lonRegex.test(88.5); // hardcoded for demo 
console.log(check) // output true 
+0

谢谢,真的很高兴知道,有点“棘手”找到:P。 – 2014-11-06 23:53:01

+0

等效地,您可以使用'var lonRegex =/^ - ?([1-8]?[1-9] | [1-9] 0)\。{1} \ d {1,6} /;'。 – 2014-11-07 00:08:23

+0

另外,它给出了(例如)'0.5'和'90.5'的错误结果。 – 2014-11-07 00:13:53