文字列に特殊文字があるかどうかを検出する正規表現を作成しようとしています。特殊文字をエスケープする方法
/[!$&*-\=^`|~#%'+?{}._]+/.test('Hello2016'); // returns true when should return false because there's no special character
前のサンプルではtrueを返しています。私はそれが=
シンボルに関連していると思うが、どこが間違っているのかわからない。
文字列に特殊文字があるかどうかを検出する正規表現を作成しようとしています。特殊文字をエスケープする方法
/[!$&*-\=^`|~#%'+?{}._]+/.test('Hello2016'); // returns true when should return false because there's no special character
前のサンプルではtrueを返しています。私はそれが=
シンボルに関連していると思うが、どこが間違っているのかわからない。
実際には-
文字のためです。文字クラス([...]
)の内部では、文字の範囲を表します。たとえば、[a-f]
は、a
,b
,c
,d
,e,
またはf
と一致します。
正しいパターンは次のようになります。
/[!$&*\-=^`|~#%'+?{}._]+/
あなたが実際にあなたが「特殊文字」を考えるものに指定していないが、はるかに簡単パターンは次のようになります。
/[^\W_]/
これは一致しますアンダースコア、またはラテン文字または小数点の桁でない文字(\W
)。
すべての特殊文字を検出したい場合は、その文字列には特殊文字としてフラグが付けられていない特殊文字が必要です。これにより、より多くのシナリオでコードが適用され、将来の証明が可能になります。
if(!name.match(/^[a-zA-Z0-9]+$/i)) {
// handle the case where there are special characters in the string
}
正規表現の特殊文字をこのようにエスケープします。
[!\$&\*\-\\=^`|~#%'\+\?{}\._]
これらは正規表現で特別な意味を持ちます。
$*-\+?.
これはおそらく動作します。
!/^[A-Za-z0-9]+$/.test('Hello2016')
特殊文字とは何ですか? a-Z 0-9でないものは何ですか? sheeldotmeはすでにあなたの質問に答えました。ユーザー入力を使用していて、それを正規表現として使用したい場合は、aldanuxのコメントが役立ちます。または、Googleがどのようにそれを行うか見ることができます:https://github.com/google/closure-library/blob/master/closure/ goog/string/string.js#L1134 – HMR