PHP邮件地址preg_match()不起作用

时间:2014-01-01 00:03:42

标签: php preg-match

我正在尝试使用正则表达式来匹配此邮件地址:

  

4F 50 Adele Street 01234 London

这是我的代码:

if( !(preg_match('/[1-9]{5}[A-Za-z] [1-9] [A-Za-z\.]+ [A-Za-z\.]+ [0-9]{5} [A-Za-z\.]+/', $address))){
        return true;
    }
}

2 个答案:

答案 0 :(得分:1)

试试这个RE:

/[1-9][a-z] [1-9][0-9] [a-z.]+ [a-z.]+ [0-9]{5} [a-z.]+/i

的变化:

  • 开头只有一位数,我删除了{5}
  • 第二个数字有两位数,我将[1-9]更改为[1-9][0-9]
  • 您不必在括号内隐藏.
  • 而不是A-Za-z,我只需编写a-z并使用i修饰符使其不区分大小写

DEMO

答案 1 :(得分:1)

您可能需要更强大的解决方案

4F 50 Adele Street 01234 London
  • 4F:总是一个数字和一个字符?或者可能是14B
  • 50:总是两位数?或任意数量的数字,例如12348
  • Adele Street:总是两个单词只包含字母?或者可能是Smith's Broad Street
  • 01234:总是五位数?
  • London:总是一个字?或者可能是Little Winging

以下是一个例子(但有很多方法可以做到!)

preg_match("/\d+[a-z]\s+\d+\s+\D+\s+\d{5}\s+\S+/i", $address);

让我们来看看

“匹配任意数量的数字\d+后跟一个字母a-z,一个或多个空格\s+,任意数量的数字\d+,一个或多个空格{{ 1}},一个或多个数字\s+,一个或多个空格\D+,正好五个数字\s+,一个或多个空格{{ 1}},一个或多个空白\d{5}

  • \s+匹配一个数字,与\S+
  • 相同
  • \d匹配任何非数字的内容,与[0-9]
  • 相同
  • \D匹配空白
  • [^0-9]匹配任何不是空白的内容
  • \s意味着匹配一个或多个 最后* \S使整个模式不区分大小写

该示例假设

  • 第一部分是数字和字母
  • 第二部分是数字
  • 街道可以是除数字+
  • 之外的任何内容
  • 邮政编码始终为五位/i
  • 城市是以非空白\D+开头的任何东西(之后可能会更多的话,我们会在第一次停止匹配)

随意提问或评论。有很多方法可以处理这样的问题,具体取决于您正在努力解决的数据!