Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止字符数超过20才能通过验证_Php_Regex - Fatal编程技术网

Php 防止字符数超过20才能通过验证

Php 防止字符数超过20才能通过验证,php,regex,Php,Regex,我有一个简单的正则表达式来验证坐标:^[0-9.,-]+{18,20}$^。例如,如果坐标为33.431441,-170.15625并且少于18个字符,我将收到一条错误消息。好的但如果我添加更多字符,比如说23个或更多,即使我将锁设置为20,它也会通过 您可以在上测试regexp 我如何解决这个问题 提前谢谢。应该是^[0-9.-]{18,20}$。+表示前面的一个或多个元素,然后有18到20个元素。您只需要前面的18到20个元素。您不需要在字符串末尾使用插入符号,因为这意味着字符串的开头您需要

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

您可以在上测试regexp

我如何解决这个问题


提前谢谢。

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

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

/^[0-9\.,-]{18,20}$/
编辑:另外,如其他人所述,删除加号。 编辑2:paren是多余的
Edit3:需要转义句点,否则,它将匹配任何字符

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

假设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位。

@MichaelDibbets-strlen将只检查长度,这里的一个要求是只允许数字、句点、逗号和破折号。因此,首先执行regexp,然后执行strlen检查,如果两者都通过,则继续谢谢!我的问题现在已经解决了,我会尽快接受你的回答:谢谢,但在我的匆忙中,我在中留下了另一个错误,请参见编辑3个字符,但根据Regex Tester,你的验证将只验证59.329512、13.482199中的12、13.48219。这是因为你可能删除了^和$字符。它们表示评估的开始和结束。如果没有“^”字符,您只能从“59.329512”中得到“12”。啊。好的。但在我在Regex Tester上测试之前,我在我的网站上测试了它,当坐标正确时,我得到了一个错误。所以我也在Regex Tester上测试了它,可以说,看看它有什么问题。