防止超过20的字符数通过验证

时间:2012-06-16 00:26:35

标签: php regex

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

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

如何解决此问题?

提前致谢。

3 个答案:

答案 0 :(得分:5)

你需要领先的克拉,或者你只是检查字符串中的最后18-20个字符:

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

编辑:同样,放弃加号,正如其他人注意到的那样 编辑2:Parens是多余的 Edit3:需要转义句点(否则,它匹配任何字符)

答案 1 :(得分:2)

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

答案 2 :(得分:0)

如果您想限制限制并验证坐标格式,请提供以下建议。

假设Lat,Long:

^-?\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的情况下强制执行小数位。