2012-02-24 4 views
0

正規表現@を持ち、.で始まらないか、.で終わらない文字列を見つけるための式です。hello @ Sameは有効です.hello @ Same、hello @ Same。とhello @ sdj @ sameはすべて無効ですRegex @を持つ文字列を検索するための正規表現。@で始めるべきではありません。またはで終わる

(^([^@]+)@([^@])+$)(^[^\\.].*$)(^.*[^\\.]$)の問題点は何ですか?

これらのすべての3つの部分が個別に動作しますが、私たちは一緒に置くときは、ラインシンボル^とあなたの正規表現で$ラインシンボルの複数のエンドの複数の開始を持っている

+0

件名へのコメント:http://stackoverflow.com/a/1076589/966590 –

+0

なぜ、複数の@を許可しないか、開始ドットを使用できないのですか?どちらも電子メールアドレスで有効です。 – Jens

+0

基本的に...私が知りたいのは、式が(patternA)&&(patternB)&&(patternC)にマッチする必要があり、それぞれのパターンが式で個別に評価できるということです。行のシンボルと行末の記号...上記の例では、patternAは@とpatternBだけを評価し、で始まらない。そしてpatternCは〜で終わらない。どのようにして3つすべてを1か所でどのように組み合わせるかは、すべて個別に作業しますか? – user1230217

答えて

0

すべての正規表現を一致させるだけでは、正規表現を連結することはできません。

もう1つ間違っているのは、電子メールアドレス を正規表現で検証しようとしていることです。これはうまくいきません。 ユーザーが有効なアドレスを入力したかどうかを確認する方法は、 メールを送信することだけです。私が言ったように、あなたの仕様に合致する

正規表現は、

^(?=[^@][email protected][^@]+$)[^.].*[^.]$ 

ことだろうが、電子メールの住所がを検証するための素晴らしい方法はないのthats。 Check this link for horrible counter examples. =)

1
^([^[email protected]]+)@([^[email protected]]+)$ 

より管理しやすい部分にそれを打破するには、次の

^([^[email protected]]+) // Start with anything except . or @ 
@   // @ must be somewhere in the expression 
([^[email protected]]+)$ // End with anything except . or @ 

それはまさにあなたの仕様に一致していない(開始または@で終わることはできません)しかし、あなたならばそれはおそらく望ましい属性であります電子メールアドレスを検証しています。

+0

です。この式では複数の@記号(@ boo @ boo @など)を使用できます。また、なぜ[^ @] | \ w + "(1つの非@文字か、または1つ以上の英数字)を使用していますか?それはOP仕様の一部ではありません。 =) – Jens

+0

@Jens - 元の問題を修正しましたが、現在は別の問題があります(現在は期間が許されていません)。私は明日の朝にこれをもう一度見ます。私はあなたがこれが電子メールアドレスを検証する悪い方法であるということの意味を理解し始めています。 8) –

関連する問題