【问题标题】:PHP Reg Ex how to preg_match exactly 2 or 3 digits in a street addressPHP 正则表达式如何 preg_match 街道地址中的 2 或 3 位数字
【发布时间】:2013-10-27 17:11:55
【问题描述】:

我正在尝试找出 reg ex 以匹配街道地址。街道地址的格式必须是 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 等都可以。

【问题讨论】:

  • 为什么“1假街”在你眼里无效?就此而言,为什么四位数也不可接受?
  • @NiettheDarkAbsol 该数字的长度必须正好为 2 或 3 位(第二句)。
  • @ComFreek 但是为什么呢?地址可以有任意位数...

标签: php regex


【解决方案1】:

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

使用这个正则表达式:

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

区别是[a-zA-Z]+而不是[a-zA-Z]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多