2017-03-16 3 views
0

私は特殊文字がファイル名に発見された場合、検証に失敗したコードを次ていますJavaScriptでRegexの一致に失敗したキャラクタを特定する方法はありますか?

var validationResult = /^[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/.test(fileName); 

これは素晴らしい作品と正しい結果を返します。しかし、今私の顧客は、どのキャラクターが実際にバリデーションに失敗したのかを知りたい。検証に失敗したキャラクターを指すように、コードを変更するにはどうすればよいですか? String.prototype.match()方法で

答えて

0

変更RegExp.prototype.test()方法のアプローチ:

var validationResult = fileName.match(/[^0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]/g); 

validationResultnullされていない場合には、それを行うには

+0

私は、この正規表現 –

+0

@AndyRayと一致しない文字*を明示的に見つけることで、質問に答えるとは思えません。今それはいいです – RomanPerekhrest

0

一つの方法は、許容可能なグループの正規表現を格納することで一致したすべての特殊文字を含む配列だ、と無効な文字を見つけるためのグループの反転を作成します。

allowedCharacters = '0-9a-zA-Z\\^\\&\\\'\\@\\{\\}\\[\\]\\,\\$\\=\\!\\-\\#\\(\\)\\.\\%\\+\\~\\_ '; 
allowedRegex = new RegExp('^[' + allowedCharacters + ']+$') 
notAllowedRegex = new RegExp('[^' + allowedCharacters + ']', 'g') 

var invalidString = 'πa√b'; 
allowedRegex.test(invalidString) // false 

invalidString.match(notAllowedRegex); // ["π", "√"] 

正規表現リテラルではなく文字列なので、正規表現文字列内のすべてのバックスラッシュ\をエスケープする必要があります。

これは、大括弧の中にあるものを反転する[^...]という正規表現を作成するだけで簡単に動作します。たとえば、[^a]は、ではなく、の文字と一致します。aです。ネイティブのRegExpクラスを使用して、文字列に基づいて正規表現を構築します。 notAllowedRegexはグローバル(g)フラグを使用して、許可された文字と一致しないすべての文字を表示します。

関連する問題