当我搜索时validate latitude longitude [javascript],我会得到无差别地匹配数字或匹配错误范围的答案,或者只是太复杂而无法调试.
公平地说,其中一些OP确实要求正则表达式,并且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
}
Run Code Online (Sandbox Code Playgroud)
是的,它不那么简洁,但它的可读性要高得多
^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$
Run Code Online (Sandbox Code Playgroud)
使用正则表达式有一些优势吗?性能?浏览器兼容?只允许正则表达式验证的库工具?SO用户炫耀他们疯狂的正则表达式sk1llz?
Eth*_*own 10
我绝对认为这是一种过度/不必要的正则表达式使用.我认为你的方法是正确的,虽然它可以稍微缩短:
function isLatitude(lat) {
return isFinite(lat) && Math.abs(lat) <= 90;
}
function isLongitude(lng) {
return isFinite(lng) && Math.abs(lng) <= 180;
}
Run Code Online (Sandbox Code Playgroud)
isFinite将拒绝任何非(有限)数字,或不能自动转换为数字(如包含数字的字符串).此外,我已经使用lng来表示经度,因为它与长度相同lat,并且不能与关键字混淆.
该Math库函数(isFinite如果可能的话)会自动强制字符串到数字.