Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 Reg Ex如何精确匹配街道地址中的2或3位数字_Php_Regex - Fatal编程技术网

PHP Reg Ex如何精确匹配街道地址中的2或3位数字

PHP Reg Ex如何精确匹配街道地址中的2或3位数字,php,regex,Php,Regex,我正试图找出与街道地址匹配的注册表项。街道地址的格式必须为2或3位数字,后跟街道名称的文本字符串,然后以“street”或“Road”结尾 因此,有效地址可以是: 假街12号 12假路 假街123号 假路123号 无效地址为: 1假街 1假路 假街1234号 假道1234号 preg_match("/^[0-9]{2,3} *[a-zA-Z] *(Street|Road)$/", $_POST['street']) 我尝试了多种方法来解决这个问题,但无法让数字正确工作。 如果我尝试/

我正试图找出与街道地址匹配的注册表项。街道地址的格式必须为2或3位数字,后跟街道名称的文本字符串,然后以“street”或“Road”结尾

因此,有效地址可以是:

  • 假街12号
  • 12假路
  • 假街123号
  • 假路123号
无效地址为:

  • 1假街
  • 1假路
  • 假街1234号
  • 假道1234号

preg_match("/^[0-9]{2,3} *[a-zA-Z] *(Street|Road)$/", $_POST['street'])
我尝试了多种方法来解决这个问题,但无法让数字正确工作。
如果我尝试
/^[0-9]{2,3}$/
,它会自动工作,但是当我添加字符串表达式时,它会把它搞砸。同样使用不带^或$的公式,它将验证长度超过3位数的任何位数。因此1234、12345等将起作用。

您没有正确的正则表达式来匹配第一个数字后面的街道名称,因为
[a-zA-Z]
只匹配单个字母表

使用此正则表达式:

preg_match("/^[0-9]{2,3} +[a-zA-Z]+ +(Street|Road)$/", $_POST['street']);
区别在于
[a-zA-Z]+
而不是
[a-zA-Z]


PS:也将更改为
+
,而不是
*
,因为这些组件之间至少需要一个空间。

为什么“一条假街道”在您眼中无效?既然如此,为什么四位数字也不能接受?@NiettheDarkAbsol数字必须精确到2或3位(第二句)。@ComFreek但为什么?地址可以有任意位数。。。