2012-02-10 12 views
7

数字(0-9)および/またはスラッシュ(/)の正規表現テストがあります。jscript regexp文字クラスのスラッシュをエスケープしますか?

/^[0-9/]+$/i.test(value) 

は今、私はこれが正しいと信じているが、JavaScriptバリ日食は同意しない:それはこのようになります

構文エラーを、このトークン

を削除 "]" トークンにこれは、区切り記号/区切り記号が/であり、eclipseが正規表現が終了したと思っている(したがって、]が予期しないことがあるためです)。

我々はそうのような/をエスケープすることにより、日食を満たすことができます。両方のバージョンは、私のために働くことを

/^[0-9\/]+$/i.test(value) 

注意。これで

私の問題は、次のとおりです。

  • は、私の知る限りでは、私は、その範囲で特異的にスラッシュをエスケープする必要はありませを行います。状況に固有のものかもしれません(javascriptの場合は、使用される区切り文字です)。
  • 彼らの両方が動作しているように見えますが、誰がどのようなI正しいとすべて:)

を知っていますので、私はむしろ..異なる環境であるため動作の「正しい」バージョンを使用し、かつ、十分だろうやればいい? エスケープかどうか範囲内の/をエスケープするという評判の良いサイトは見つかりませんでしたが、Eclipseバリデーターはおそらく完全に愚かではありません...

+0

はい、annoyingly Notepad ++の構文の強調表示はこれも間違っています。 – MikeM

答えて

8

標準では、エスケープされていないもの\]改行:

RegularExpressionClassChar :: 
    RegularExpressionNonTerminator but not ] or \ 
    RegularExpressionBackslashSequence 

RegularExpressionNonTerminator :: 
    SourceCharacter but not LineTerminator 

http://es5.github.com/#x7.8.5)。 /をエスケープする必要はありません。

一方、私は個人的には疑わしいときにはすべてを逃してしまいます。スマートなパーサーを幸せにするためです。

+0

いいです。:)私は実際に「Ecma標準」のスピードアップではありませんが、これはほとんどの.jsパーサーに使用される標準です。あなたは物を壊すことなくエスケープする必要のないものから逃れることができますか? – Nanne

+0

@Nanne:はい、ほとんどのjavascriptベンダーはecma標準に追いつこうとします。誰もが完全に正しいとは限りませんが、基本的なことはどこでも同じように機能するはずです。そして、はい、余分なバックスラッシュは、たとえそれを省略しても安全です。 – georg

関連する問題