PHP Reg Ex如何精确匹配街道地址中的2或3位数字
我正试图找出与街道地址匹配的注册表项。街道地址的格式必须为2或3位数字,后跟街道名称的文本字符串,然后以“street”或“Road”结尾 因此,有效地址可以是: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']) 我尝试了多种方法来解决这个问题,但无法让数字正确工作。 如果我尝试/
- 假街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但为什么?地址可以有任意位数。。。