2017-06-09 6 views
1

私は質問を短くしても分かりやすくしようと考えています.Javascriptで英数字以外の文字(AKAシンボル)をチェックする簡単なRegExがあります。それは次のようになります "/ [$ -/- { - 〜?!"^_ `[]]Javascriptで動作するRegExはPHPではそうではありません

if(/[$-/:-?{-~!"^_`\[\]]/.test(string)) 

これらの文字のいずれかがである場合にだけ、作品をやってJavaScriptで/」

、文字列は、それは私がPHP、この方法をやったときに

if(preg_match('/[$-/:-?{-~!"^_`\[\]]/', $string)) 

他の正規表現が動作し、次のように同じことを実行しようとしました。それが偽与えるだろう、そうでない、真なりますが、この特定の一つは、単に偽与えますPHPをいつ実行したかに関係なく、

これには何らかの理由がありますか?私は何か間違っているのですか? PHPはregexesを別の方法で理解していますか?私はそれを動作させるために何を変えるべきですか?

お時間をいただきありがとうございます。

+1

'/'は区切り文字ですので、その文字クラスでエスケープする必要があります。 JSで問題を投げないと驚いた。 '$ - /'は '$'、 '-'、'/'ではなく、範囲です(36-47、http://www.asciitable.com/index/asciifull.gif) – chris85

+0

@ chris85 JavaScriptの正規表現は文字列ではないので、開いている文字クラスの一部として '/'が見えていると思います。私はあまりにも驚いています。 –

+0

しかし、OPでは、たくさんの文字を表示するのではなく、あなたが望む文字のパターンを作成するのが普通です。あなたが提供したリストは、すべての記号文字の完全なリストではありません。異なるキーボードレイアウトには、あなたが持っていないか見ていない文字があります。 '/ [^ a-zA-Z0-9] /'のようなネガティブな文字クラスを使う方が、文字や数字以外のものにマッチする方が良いでしょう。クラスの先頭にある '^'は、* NOT *を意味します。 –

答えて

2

PHPはPCREを使用するのでだからここhttp://regex101.com/r/3ILGgE/1

見られるように、あなたは/区切り文字を使用して、パターンのエラーが表示されますが、それは正しくエスケープする必要があります。区切り文字として/を使用して

、文字列を区切り文字として~を使用して

'/[$-\/:-?{-~!"^_`\[\]]/' 

で、文字列はまた、あなたがクラス$-/範囲ののカップルを持って注意して

'~[$-/:-?{-\~!"^_`\[\]]~' 

です:-?{-~
これには、範囲の文字から範囲の文字までが含まれます。
およびには範囲文字-が含まれています。

+0

これは、感謝してトリックをしました。 – Markski

関連する問題