我是编码和PHP的新手,我很难理解如何读取正则表达式。
例如,我构建了下面的简单正则表达式,这是一种验证电子邮件地址的弱尝试。
电子邮件地址 - test@test.com
正则表达式 - ^([0-9a-zA-Z])+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$
我想了解的是,如何处理和阅读此示例中的每个电子邮件地址段,例如
显然,如果我在等式中引入一个额外的段,例如test-123正则表达式失败。
答案 0 :(得分:4)
基础是
^([0-9a-zA-Z])+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$
^匹配字符串的开头 ()匹配您可以提取和使用的段,如果您使用preg_match例如
([0-9a-zA-Z])+表示它将匹配仅指定的那些字符中的一个或多个 对于电子邮件地址,还有其他有效的字符,如果您想了解详细信息,则应阅读电子邮件RFC http://tools.ietf.org/html/rfc5322
还有其他方法可以做到这一点,例如,如果在模式的末尾使用了/ i修饰符,则可以使其不区分大小写,然后您不需要同时指定a-z和A-Z
/^([0-9a-z])+@([-0-9a-z]+[.])+[a-z]{2,6}$/i
@符号非常明显,是电子邮件地址的必要部分(在外部系统中,内部电子邮件并不总是需要@,因为它可以默认为内部域名)
([ - 0-9A-ZA-Z] + [。])+ 这部分匹配域的主要部分,我注意到你已经包含了连字符 - 这次是在charset中。我也在想你应该拥有\。而不仅仅是。作为自己。匹配任何东西,而不是像你期望的那样完全停止。
所以它会匹配这些字符中的一个或多个[-0-9a-zA-Z],然后是任何字符
[A-ZA-Z] {2,6-} 匹配[a-zA-Z],最小长度为2,最大长度为6
$匹配然后字符串结束 如果您在电子邮件地址结尾后有空格,则验证失败,因此在这种情况下您需要先修剪它
匹配电子邮件地址实际上并不容易,因为有很多变体都是有效的
例如,这些都可以是有效的电子邮件地址 bumperbox bumperbox@invalid.com bumper-box@invalid.com bumperbox@invalid.co.uk bumper.box@subdomain.invalid.school.nz
您最好的选择是使用网络上已有的一种已建立的电子邮件验证模式,在preg_match下的php手册中有一些关于电子邮件验证的讨论,等等
如果你有最近的(5.2+)版本的php,你也可以使用filter_var等函数 http://nz.php.net/manual/en/function.filter-var.php
答案 1 :(得分:0)
test-123@test.com
会失败,因为您的正则表达式中没有-
电子邮件的该组件。它可能看起来没有,但确实没有。当你在正则表达式中[a-z]
时,它实际上相当于说出[abcdefghijklmnopqrstuvwxyz]
,并且看到了-
。
如果您想在电子邮件地址的第一部分中添加短划线,则需要:
`[a-zA-Z0-9\-]`
注意反斜杠(\
),ESCAPES破折号使其失去元字符状态(又名“特殊”)并变成与其他任何角色一样的字符。
答案 2 :(得分:0)
正则表达式没有“段”。引擎通过字符串试图找到匹配的字符序列。您在此处对“细分”的看法是在您的脑海中创建的,因为@
(以及最终捕获中缺少.
)充当锚点,为任何匹配输入的某些部分设置某些标准。
使用regexpal.com查看如何找到匹配项。