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