2016-11-29 5 views
1

@の前にピリオド(「。」)を入力すると、既存の電子メールの正規表現が失敗します。Javascriptの正規表現の否定 - 電子メールの正規表現での期間を無効にする

これが今私が持っている正規表現です:

^[a-zA-Z]+[a-zA-Z0-9.][email protected]$ 

これら渡す必要があります。

[email protected] 
[email protected] 

しかし、これらはいけないを:

[email protected] 
[email protected] 

期間で始まる最初のケースを2番目のケースは処理されません。

+0

ない、それは角括弧だ場合 - それはその特別な意味を失います。 – vlaz

+0

本当に!それを知らなかった。コメントは取り消されました。 – dan08

+0

@ dan08ええ - ほとんどの文字は角括弧で特別な意味を失います。最も顕著なのは '[]'(まだそれらをエスケープする必要がある)だけでなく、文字範囲を示す ' - 'です。ただし、最初または最後に配置すると、ダッシュとして扱われます。 – vlaz

答えて

0

私がしようとするだろう: は^ [a-zA-Z]の+ [。-ZA-Z0-9] * [-ZA-Z0-9] + @ domain.com $

+0

これは、@の前に少なくとも2文字必要とするので、たとえば 'a @ domain.com 'は失敗します。それはあなたが望むものかもしれません。 –

+0

True - 私はこれを元の正規表現に近づけようとしていました。なぜなら、それは手紙で始めると思っていたからです。 – theTrueMikeBrown

+0

おっと、私は数字で始めることができなかったことに気付かなかった。とにかく、それは実際には批判ではなく、表現の正確な意味/含意についての注釈です。 –

0

これを試してみてください正規表現:^[\w.+-]*[^\W.]@domain\.com$。 (任意の受け入れの文字が、.を意味する)、非英数字文字または. @domain\.com

  • ない

    • [\w.+-]*マッチ英数字の任意の数、+-.
    • [^\W.]一致する文字残りの電子メールと一致し、希望どおりドメインを変更するか、@\w\.\w+を使用してほとんどのドメインを照合します。 (すべてのドメインにマッチするともっと複雑です。電子メールマッチの正規表現hereを参照してください)
  • 1

    これは、@記号の前に2文字以上の文字を入力する必要はありません。

    ^[a-zA-Z][a-zA-Z0-9]*(?:\.+[a-zA-Z0-9]+)*@domain\.com$ 
    

    ここでそれが壊れる方法は次のとおりです。dan08 @

    ^     Make sure we start at the beginning of the string 
    [a-zA-Z]   First character needs to be a letter 
    [a-zA-Z0-9]*  ...possibly followed by any number of letters or numbers. 
    (?:    Start a non-capturing group 
        \.+   Match any periods... 
        [a-zA-Z0-9]+ ...followed by at least one letter or number 
    )*     The whole group can appear zero or more times, to 
            offset the + quantifiers inside. Otherwise the 
            period would be required 
    @domain\.com$  Match the rest of the string. At this point, the 
            only periods we've allowed are followed by at 
            least one number or letter