我正在尝试找出与街道地址匹配的正则表达式。街道地址的格式必须是 2 或 3 位数字,后跟街道名称的文本字符串,然后以“街道”或“道路”结尾。
所以一个有效的地址可以是:
- 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:还更改为 +
而不是 *
因为这些组件之间至少需要 1 个空格。
关于PHP Regex 如何精确匹配街道地址中的 2 或 3 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19620887/