2

重複の可能性:
電子メールを検証するために正規表現を変更しますか?

$email = $_POST["email"];

if(preg_match("[@{1}]",$email))
    echo "There is only one @ symbol";

if(preg_match("[@{2,}]",$email))
    echo "There is more than one";

私の問題は単純ですが、正規表現をほとんど使用したことがないため、出力が思い通りにならないのです。また、$email は投稿データです。

$email に 2 つ以上の @ 記号がある場合、複数あることが表示されます。$email に @symbol が 1 つある場合、@ 記号が 1 つしかないことが表示されます。簡単ですよね?

4

3 に答える 3

3

最初の式は@どこでも一致します。それが唯一のものである必要があるとは決して言いません。

2 番目の式は、2 つ以上の連続 @する記号に一致します。何か他のもので区切られている 2 つのケースは検出されません。

「1つだけ」または「1つ以上」の概念を正規表現と互換性のある用語に翻訳する必要があります。

  • @「1つだけ」:非で囲まれた単一@:^[^@]*@[^@]*$

  • 「複数」:@何かで区切られた 2 つ:@.*@

また、関連する有用な概念である「1つ以外のすべて」(つまり、0、2、3、4...) は、単純に最初の 1 の否定 (つまり!preg_match('/^[^@]*@[^@]*$/', $email))として使用できます。

于 2012-05-14T06:39:13.657 に答える
1

私はそれを使用することをお勧めしexplodeますcount

if (count(explode('@', $email)) > 2) {
    //here you have 2 or more
}

あなたが達成しようとしている目標は何ですか?その中に1 つしかないかどうかを本当に知りたいですか、それとも@電子メール アドレス全体を検証したいですか? 検証したい場合は、次の投稿をご覧ください:電子メールを検証するために正規表現を変更しますか?

于 2012-05-14T06:42:08.433 に答える
0
you need to enclose your regex in delimiters like forward slash(/) or any other char.

$email = $_POST["email"];

if(preg_match("/[@{1}]/",$email))
    echo "There is only one @ symbol"."</br>";

//you have to use preg_match_all to match all chars because preg_match will stop at first occurence of match.

if(preg_match_all("/(\w*@)/",$email,$matches)){             //\w matches all alphanumeric chars, * means 0 or more occurence of preceeding char 
    echo "There is more than one"."</br>";
    print_r($matches);}                                 //$matches will be the array of matches found.
?>
于 2012-05-14T08:10:16.800 に答える