3

以下のように、JavaScriptのオブジェクトプロパティに設定されている正規表現を使用する必要があります

var myObj = { mask : /([a-z]|[A-Z]|[0-9]|-|\.|\'|[&])/}

パラメータとして取得する他の関数で、その関数で、正規表現の上に一致しないmyObj文字が文字列に含まれているかどうかをテストする必要があります。例

function check(myObj , value){
//Want to code here to read myObj.mask and return false if value contains 
//any character not matching myObj.mask. as per above example if value contain any special character 
// like &#$% then i want to return false

}
4

2 に答える 2

2

あなたの正規表現は非常に冗長です。不必要なエスケープをたくさん行っています。短いバージョンを使用できます。

/^([a-zA-Z0-9-.'&])*$/

いくつかのアンカーを追加したことに注意してくださいRegExp.test()

var myObj = { mask : /^([a-zA-Z0-9-.'&])*$/ }

function check(myObj , value){
    return myObj.mask.test(value);
}

console.log(check(myObj, "abc1-.'&")); //true
console.log(check(myObj, "&#$%")); //false
console.log(check(myObj, "abc#")); //false

の説明/^([a-zA-Z0-9-.'&])*$/

  • ^ 文字列の先頭
  • ( グループとキャプチャ開始グループ 1
  • [a-zA-Z0-9-.'&] 次のいずれかの文字: ato zAto Z0to 9-.'または&
  • ) グループ1の終わり
  • *グループ 1 を 0 回以上
  • $ 文字列の終わり

[a-z]|[A-Z]と同じなのでオリジナルよりもシンプルです[a-zA-Z]。また、文字クラス内 (つまり、 と の間[)では、 、または]をエスケープする必要はありません。.'&

表現を変えないと

RegExpその場合、パラメータとして渡されたものを適応させて、新しいオブジェクトを作成できます。

var myObj = { mask : /([a-z]|[A-Z]|[0-9]|-|\.|\'|[&])/ }

function check(myObj , value){
    return new RegExp('^'+myObj.mask.source+'*$').test(value);
}

console.log(check(myObj, "abc1-.'&")); // true
console.log(check(myObj, "&#$%")); // false
console.log(check(myObj, "abc#")); // false
于 2013-08-02T04:38:07.293 に答える
0

これは、

return myObj.mask.test(value)
于 2013-08-02T04:36:10.857 に答える