2014-11-06 20 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