我正在尝试制作一个正则表达式来匹配电子邮件地址,例如:
example@website.com
first.last@website.org
joe87_smith@web.net
我写了这个正则表达式:
$pattern = "/[\-\.\_a-z0-9]+(\@){1}[\-\.\_a-zA-Z0-9]+(\.){1}[\-a-z0-9]+/i";
这是我用来测试它的一些代码:
$str = "test_last@test.com was the email address associated with another one, another.test@other.org";
$pattern = "/[\-\.\_a-z0-9]+(\@){1}[\-\.\_a-zA-Z0-9]+(\.){1}[\-a-z0-9]+/i";
preg_match_all($pattern, $str, $matches);
var_dump($matches);
(电子邮件之间的文字是填充物)它应该做如下:
- 检查可包含一个或多个句点、破折号、下划线或字母数字字符的用户名。
- 检查一个且只有一个(必需的)“@”符号。
- 检查域或任意数量的子域(字母数字 + 句点 + 破折号)
- 检查后跟字母数字或短划线字符的句点。
当我测试上面的代码时,我得到这个输出:
array(3) {
[0] => array(2) {
[0] => string(22) "test_last@test.com was"
[1] => string(22) "another.test@other.org"
}
[1] => array(2) {
[0] => string(1) "@"
[1] => string(1) "@"
}
[2] => array(2) {
[0] => string(1) " "
[1] => string(1) "r"
}
}
为什么它匹配这么多其他字符,例如单个 @ 符号和字母“r”?为什么第一封电子邮件包含单词是?据我所知,我从未测试过空间...