2016-09-14 2 views
-1

私は非常に、非常に単純な正規表現、やっている:/^.*@.*\..*[a-z]$/i特定の特殊文字がRegexで文字列内のどこにも表示されないようにしますか?

私がやろうとしているすべての文字列に<または> ANYWHEREがある場合に失敗しますそこに投げるものですが。

私の元々の考えは/^[^<>].*@.*\..*[a-z]$/iでしたが、<または>が文字列の先頭または末尾にある場合にのみ失敗します。それらの文字のいずれかが文字列のどこにあっても失敗するという単純なコマンドがありますか?

+1

だけでないのはなぜ'!str.includes( '<')&&!str.includes( '>')? –

答えて

2

なぜ再使用gex?それは過剰なもののように思えますし、正規表現については単純なことはありません。

includes()機能を代わりに使用するのはなぜですか?

+0

。うん、私は完全に関数を忘れてしまった。私はこれを使用して終了し、それは魅力のように動作します。思い出してくれてありがとう。 – amacdonald

+0

'String.prototype.includes()'はInternet Explorer –

+0

でサポートされていません。 IEが問題であれば、polyfillまたは 'indexOf()'関数を使うことができます。 – Amy

0

あなたが正規表現に代わり.*の否定文字クラスを使用することができます。

/^[^<>]*@[^<>]*\.[^<>]*[a-z]$/i 

[^<>]*だけの存在をテストするために<または>

さもないではない任意の文字の0回以上にマッチします<または>使用:

var ret = /[<>]/.test(string); // true means presence of <or> 
+0

否定的な先取りは良くないでしょうか? –

+0

パフォーマンス上のネゲートされた文字クラスは常に先読みを打ち負かしますが、はい、私たちも使用できます: '/ ^(?!。* [<]]。* @。* \ .. * [az] $/i' – anubhava

2

必要なRegExpは、/<|>/という単純なものです。 `代わりに正規表現を使用してのテスト'not<ok>string'.match(/<|>/);'okstring'.match(/<|>/)

var okString = 'okstring'; 
 
var notOkString = 'not<ok>string'; 
 

 
if(okString.match(/<|>/)){ 
 
    console.log('this won\'t log'); 
 
} 
 

 
if(notOkString.match(/<|>/)){ 
 
    console.log('this will log'); 
 
}

関連する問題