2017-03-28 7 views
-2

次の文字の少なくとも1つが存在している場合、私はテストがfalseを返すようにしたい:^/,:<>[email protected]#$%^&()+=?()“|!\[#$-JavaScriptのテストを行うには、少なくとも1つの禁止された文字が存在する場合はfalseを返しますか?

だから私はこれをしなかった:

const pattern = /[^/,:<>[email protected]#$%^&()+=?()“|!\[#$-]/ 
console.log(pattern.test('fff>')) 

しかし、これはそれを返す必要がありますtrue
Codepen

を返します。少なくとも1つの禁止文字:<が存在するため、falseです。

これを反映するために正規表現を変更するにはどうすればよいですか?

+1

否定先読みを使用してください。 : '(^?!。* [allofyourcharacters here])' – Jan

+2

パターンの一部が一致したので* true *を返すべきです。**一致するものがあればtrue ** " - ht tps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test –

答えて

2

あなたはそれがfffと一致するので、trueを返し、そうでない場合

^で開始を指定し、$で終了し、クラスに+

をプラスを追加する必要があります。

厳密な開始と終了を行うと、完全なテストが実行されます。

const pattern = /^[^/,:<>[email protected]#$%^&()+=?()“|!\[#$-]+$/; 
 
console.log(pattern.test('fff>')); // false 
 
console.log(pattern.test('fff')); // true

+2

'^'文字自体も禁じられた文字のリストに含まれているはずです。だからあなたは否定されたクラスにそれを追加する必要があります。しかし、これは別の方法で動作するはずです。 –

1

としては、あなたが否定先読みを使用したい場合があり、コメントで述べている:

const pattern = /(?!.*[/^,:<>[email protected]#$%^&()+=?()“|!\[#$-]).+/ 
 
console.log(pattern.test('fff>'))

a demo on regex101.comを参照してください。

1

否定された文字クラスの禁止された文字をチェックするのはなぜですか?

通常の文字クラスを使用すると物事は簡単になります。

const forbiddenChars = /[/,:<>[email protected]#$%^&()+=?()“|!\[#$-]/; 
var success = !inputString.test(forbiddenChars); 
1

正規表現パターンには、エスケープされていない特殊文字と重複した文字が数多く含まれているようです。私は通常私のテストは、特殊文字が存在するかどうかをチェックして、それを否定するん

const pattern = /[\\\/,:<>[email protected]#$%\^&()\+=\?"\|\[\]-]/; 
console.log(! pattern.test('fff>'); 
1

:意図が記載されている特殊文字のいずれかの存在を検出するためだったと仮定すると、これは、所望の結果を達成する必要があります。したがって、特別な存在がfalseを返す必要がある場合。 あなたは次の文字をエスケープする必要があります: 大括弧で囲まれた "["と "]";バックスラッシュ "\";キャレット "^";ドル記号 "$";ピリオドまたはドット ";垂直バーまたはパイプ記号 "|"。疑問符 "?";アスタリスク "*";プラス記号/マイナス記号 "+"/" - ";中かっこを開く/閉じる、 "{"と "}";そして

const pattern = /[/,:<>[email protected]#\$%\^&\(\)\+=\?"\|!\\\[#$\-\]]/ console.log(!pattern.test('fff>'))

括弧、 "(" と ")" オープン/クローズは、このパターンを試してみてください。パターンを記憶することは、結果を否定することを忘れないでください。残念ながら私はatmをテストすることができません。私はモバイルデバイスを使用しています。私はテストをすると後で編集します。

:すべてのメタ文字をエスケープしたかどうかはわかりません。

注2:正規表現に「*」を追加しない場合は、「*」を受け入れたくないかどうかわかりません。真ん中のどこかに追加してください

注3:式テストの倍数も、キーボードを使用して作成された二重引用符とは異なるようです。通常、私はワードプロセッサを使用するとき、私はあなたのように傾いた二重引用符を取得します。注3 - updated:regexを編集しました。(注:この文章では、引用符で囲まれていない部分を引用符で囲んでいます。通常の二重引用符をテストするために

EDITED - 。。私はそれが動作しているようだテストしてきた https://codepen.io/anon/pen/RpYdmM?editors=1111 私はすべての特殊文字を試してみましたhaventはほんの数を見て

関連する問題