我有这个轻正则表达式来验证坐标:^([0-9.,-]+){18,20}$^
.例如,如果坐标是 33.431441,-170.15625 并且少于 18 个字符,我将收到一条错误消息。好!但是,如果我添加更多字符说 23 或更多,即使我将锁设置为 20,它也会通过。
您可以在 http://regexpal.com/上测试正则表达式。
如何解决此问题?
提前谢谢。
您需要前导克拉,或者只检查字符串中的最后 18-20 个字符:
/^[0-9.,-]{18,20}$/
编辑:另外,正如其他人所指出的那样,删除加号。
编辑2:括号是多余的
Edit3:需要转义句点(否则,它匹配任何字符)
它应该只是^([0-9.,-]){18,20}$
.+
表示上述一个或多个元素,然后您有 18 到 20 个元素。您只需要上述元素中的 18 到 20 个。您不需要末尾的插入符号,因为这意味着"字符串的开头"
限制限制并验证坐标格式,这里有一个建议。
假设纬度,经度:
^-?d{1,2}(.d{1,5})?,-?d{1,3}(.d{1,5})?$
逗号将始终使用 1 个字符。最大经度主要数字为 3 个字符。最大纬度主数字为 2 个字符。可选小数点占 2 个字符。可选极性为 2 个字符。
这给我们留下了 10 个字符,每边还剩下 5 个小数位。 您可以将 \d{1,5} 调整为 \d{4,5} 之类的值,如果至少需要 18,则强制使用小数位。