次のいずれかのように、メールアドレスに一致する正規表現を作成しようとしています:
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);
(メール間のテキストはフィラーです)次のようにすることになっています:
- 1 つ以上のピリオド、ダッシュ、アンダースコア、または英数字を含むことができるユーザー名を確認してください。
- 1 つだけ (必須) の「@」記号を確認してください。
- ドメインまたは任意の数のサブドメインを確認します (英数字 + ピリオド + ダッシュ)
- ピリオドの後に英数字またはダッシュ文字が続くことを確認します。
上記のコードをテストすると、次の出力が得られます。
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" など、他の多くの文字と一致するのはなぜですか? 最初のメールに was という単語が含まれているのはなぜですか? 私の知る限り、スペースをテストしたことはありません...