为什么使用正则表达式来验证Javascript中的纬度和经度?

时间:2016-10-03 23:33:30

标签: javascript

当我validate latitude longitude [javascript] function isLatitude(maybeLat) { var latF = parseFloat(maybeLat) if (isNaN(latF)) return false return (latF >= -90 && latF <= 90) } function isLongitude(maybeLon) { var lonF = parseFloat(maybeLon) if (isNaN(lonF)) return false return lonF >= -180 && lonF <= 180 } 时,我会得到searchmatch digits indiscriminatelymatch the wrong range的答案。

公平地说,其中一些OP确实要求用于正则表达式,而Javascript不是我的第一语言,但它似乎更简单,更不容易出错数学:

^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$

是的,它不那么简洁,但它比

更具可读性
{{1}}

使用正则表达式有一些优势吗?性能?浏览器兼容?只允许正则表达式验证的库工具? SO用户炫耀他们疯狂的正则表达式sk1llz?

1 个答案:

答案 0 :(得分:9)

我绝对认为这是一种过度/不必要的正则表达式使用。我认为你的方法是正确的,虽然它可以稍微缩短:

/ashok/xyz

/ashok/file:abc.jpg将拒绝任何非(有限)数字,或者不能自动转换为数字(如包含数字的字符串)。另外,我已经开始使用function isLatitude(lat) { return isFinite(lat) && Math.abs(lat) <= 90; } function isLongitude(lng) { return isFinite(lng) && Math.abs(lng) <= 180; } 来表示经度,因为它与isFinite的长度相同,并且不能与关键字混淆。

如果可能,lng库函数(和lat)会自动将字符串强制转换为数字。