許可されたcharacters
文字を含む文字列があります。input
からの値しかない場合、別の文字列 ( ) をチェックしたいと思いますcharacters
。
可能かどうかはわかりませんが、入力で文字のみが許可されているかどうかを判断するためregex
に使用するソリューションを探しています。match()
許可されたcharacters
文字を含む文字列があります。input
からの値しかない場合、別の文字列 ( ) をチェックしたいと思いますcharacters
。
可能かどうかはわかりませんが、入力で文字のみが許可されているかどうかを判断するためregex
に使用するソリューションを探しています。match()
RegExpコンストラクターを使用して、文字列から正規表現を作成できます。
function validStringUnsanitized(allowed, str) {
var re = new RegExp("^[" + allowed + "]+$");
return re.test(str);
}
> validStringUnsanitized('abx', 'abx');
true
> validStringUnsanitized('abx', 'ght');
true
しかし、特殊文字を許可したい場合は、許可されたものをサニタイズする必要があります。そうしないと、望ましくない結果が得られます。
// the regex becomes [ab-x] which is from a to x
> validStringUnsanitized('ab-x', 'ghai');
true
> validStringUnsanitized(']ab', 'ab');
false
したがって、次のようにいくつかの文字をエスケープする必要があります。
function validString(allowed, str) {
var sanitized = allowed.replace(/([\]\-\\])/g, '\\$1')
var re = new RegExp("^[" + sanitized + "]+$");
return re.test(str);
}
> validString(']ab-x\\[', 'abxaabbx');
true
> validString(']ab-x\\[', 'ab-\\xb[]ab');
true
> validString(']ab-x\\[', 'ghai');
false
これを試してみてください。テスト文字列に許可された文字のみが含まれている場合、成功は true になります。これは大文字と小文字が区別されます。
var allowedCharacters = "abcdefghijklmnopqrstuvwxyz";
var regex = new RegExp("^[" + allowedCharacters + "]*$");
var testString = "abc#@#";
var success = regex.test(testString);
大文字と小文字を区別しない場合は、それぞれの行を以下に置き換えます。これにより、正規表現修飾子が追加されます。
var regex = new RegExp("^[" + allowedCharacters + "]*$", "i");
allowedCharacters 変数に特殊文字がある場合は、ダブル スラッシュでエスケープする必要があります。したがって、角括弧文字も使用できるようにするには、使用する必要があります。
var allowedCharacters = "abc\\[";
これは、最初のバックスラッシュが文字列のエスケープ用であり、2 番目のバックスラッシュが正規表現でのエスケープであるためです。
この関数でそれを行うことができます
var allowed = 'abcdef';
function CheckAllowedWithRegex(str,allowed){
var pattern = new RegExp("[^"+allowed+"]");
return str.match(pattern) == null;
}
var str1 = 'aaabcc';
var str2 = 'aavbllkwqxx';
alert( CheckAllowedWithRegex(str1,allowed ) ); // output is true
alert( CheckAllowedWithRegex(str2,allowed ) ); // output is false