私は質問を短くしても分かりやすくしようと考えています.Javascriptで英数字以外の文字(AKAシンボル)をチェックする簡単なRegExがあります。それは次のようになります "/ [$ -/- { - 〜?!"^_ `[]]Javascriptで動作するRegExはPHPではそうではありません
if(/[$-/:-?{-~!"^_`\[\]]/.test(string))
これらの文字のいずれかがである場合にだけ、作品をやってJavaScriptで/」
、文字列は、それは私がPHP、この方法をやったときに
if(preg_match('/[$-/:-?{-~!"^_`\[\]]/', $string))
他の正規表現が動作し、次のように同じことを実行しようとしました。それが偽与えるだろう、そうでない、真なりますが、この特定の一つは、単に偽与えますPHPをいつ実行したかに関係なく、
これには何らかの理由がありますか?私は何か間違っているのですか? PHPはregexesを別の方法で理解していますか?私はそれを動作させるために何を変えるべきですか?
お時間をいただきありがとうございます。
'/'は区切り文字ですので、その文字クラスでエスケープする必要があります。 JSで問題を投げないと驚いた。 '$ - /'は '$'、 '-'、'/'ではなく、範囲です(36-47、http://www.asciitable.com/index/asciifull.gif) – chris85
@ chris85 JavaScriptの正規表現は文字列ではないので、開いている文字クラスの一部として '/'が見えていると思います。私はあまりにも驚いています。 –
しかし、OPでは、たくさんの文字を表示するのではなく、あなたが望む文字のパターンを作成するのが普通です。あなたが提供したリストは、すべての記号文字の完全なリストではありません。異なるキーボードレイアウトには、あなたが持っていないか見ていない文字があります。 '/ [^ a-zA-Z0-9] /'のようなネガティブな文字クラスを使う方が、文字や数字以外のものにマッチする方が良いでしょう。クラスの先頭にある '^'は、* NOT *を意味します。 –