0

許可されたcharacters文字を含む文字列があります。inputからの値しかない場合、別の文字列 ( ) をチェックしたいと思いますcharacters

可能かどうかはわかりませんが、入力で文字のみが許可されているかどうかを判断するためregexに使用するソリューションを探しています。match()

4

4 に答える 4

2

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

JSFiddle

于 2013-06-27T10:10:58.190 に答える
1

JSフィドル

これを試してみてください。テスト文字列に許可された文字のみが含まれている場合、成功は 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 番目のバックスラッシュが正規表現でのエスケープであるためです。

于 2013-06-27T10:11:00.343 に答える
0

この関数でそれを行うことができます

http://jsfiddle.net/SXeTJ/

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
于 2013-06-27T10:21:33.573 に答える