8

メールアドレスチェック用の正規表現パターンを作成しようとしています。これにより、ドット (.) が許可されますが、複数のドットが隣り合っている場合は許可されません。

一致する必要があります: test.test@test.com

一致してはいけません: test..test@test.com

インターネット上には電子メール マッチングの例が何千もあることがわかったので、完全な解決策へのリンクを投稿しないでください。ここで学習しようとしています。

実際、私が最も興味を持っているのはローカル部分です: 一致すべき test.test と一致すべきでない test..test です。助けてくれてありがとう。

4

5 に答える 5

6

任意の数の[^\.](ドットを除く任意の文字) と[^\.])\.[^\.](2 つの非ドットで囲まれたドット) を、それらの間に論理和 (パイプ記号 ) を使用し、(それらの任意の数) で|全体を配置することにより許可できます。文字列全体がそれらで構成されていること。コードは次のとおりです。*^$

$s1 = "test.test@test.com";
$s2 = "test..test@test.com";
$pattern = '/^([^\.]|([^\.])\.[^\.])*$/';
echo "$s1: ", preg_match($pattern, $s1),"<p>","$s2: ", preg_match($pattern, $s2);

収量:

test.test@test.com: 1
test..test@test.com: 0
于 2012-05-20T13:56:58.360 に答える
5

これは私にとってより論理的です:

/[^.]([\.])[^.]/

そしてそれは簡単です。先読みと後読みは、値を取得しないため、非常に便利です。ただし、この場合、キャプチャ グループは中央のドットの周りにのみあります。

于 2012-05-20T13:50:35.217 に答える
1
strpos($input,'..') === false

strpos`$input' に '..' がない場合、関数はより単純です。テストは成功です。

于 2012-05-20T13:53:48.947 に答える
0
^([^.]+\.?)+@$

の前にあるものはこれで@十分です。残りはお任せします。他の奇妙なキャラクター設定を避けるために、もっと最適化する必要があることに注意してください。

私が最初にやったように、^とを忘れないでください:($

また、切り落とすのを忘れました.-愚かな私

于 2012-05-20T13:48:37.303 に答える