当我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
}
时,我会得到search或match digits indiscriminately或match 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?
答案 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
)会自动将字符串强制转换为数字。