あなたの正規表現は非常に冗長です。不必要なエスケープをたくさん行っています。短いバージョンを使用できます。
/^([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 z、Ato Z、0to 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