0

我有这个简单的正则表达式来验证坐标:^([0-9.,-]+){18,20}$^。例如,如果坐标是 33.431441,-170.15625 并且少于 18 个字符,我会收到一条错误消息。好的!但是,如果我添加更多字符来表示 23 或更多,即使我已将锁定设置为 20,它也会通过。

您可以在http://regexpal.com/上测试正则表达式。

我该如何解决这个问题?

提前致谢。

4

3 回答 3

5

您需要前导克拉,或者您只检查字符串中的最后 18-20 个字符:

/^[0-9\.,-]{18,20}$/

编辑:另外,删除加号,正如其他人所指出的那样。
Edit2:Parens 是多余的
Edit3:需要转义句点(否则,它匹配任何字符)

于 2012-06-16T00:30:11.957 回答
2

应该只是^([0-9.,-]){18,20}$。表示前面的+一个或多个元素,然后你有 18 到 20。您只需要 18 到 20 个上述元素。最后不需要插入符号,因为这意味着“字符串的开头”

于 2012-06-16T00:29:25.513 回答
0

如果您想限制限制并验证坐标格式,这里有一个建议。

假设纬度,经度:

^-?\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 位,则强制使用小数位。

于 2012-06-16T00:38:54.163 回答