1

英数字、ドット、ハイフンを含む単語のみを許可する JS 正規表現が必要です。

これが正しいことを教えてください。

var regex =  /^[a-zA-Z_0-9/.-]+$/;
4

2 に答える 2

3

ほとんど。これにより、アンダースコアとスラッシュも許可されます。それらを範囲から削除します。

var regex =  /^[a-zA-Z0-9.-]+$/;

これも空の文字列と一致しません。それはあなたが望むものかもしれませんが、あなたが望むものではないかもしれません. 希望どおりでない場合は、 に変更+して*ください。

于 2012-09-30T05:00:42.130 に答える
1

私が最初に行う単純化は、「単語文字」の省略形「\ w」を使用することです。これは「a-zA-Z」とほぼ同じですが、短く、次のような他の言語に移動しても自動的に正しいままです。いくつかのアクセント付きアルファベット文字、および「数字」の省略形「\d」。

また、ドットは正規表現のほとんどの場所で特別ですが、角かっこ内では特別ではないため、ここで引用しないでください(さらに、1文字の引用文字はスラッシュであり、スラッシュではありません。角かっこ内のスラッシュは、REを開始および終了する文字と同じであるため、REを途中で終了する可能性があります。解析エラー!)完全に破棄しているので、スラッシュかバックスラッシュか、引用符かかっこかは関係ありません。

お気づきのとおり、ハイフンには角かっこ内の「範囲」という特別な意味があります(例:az)。したがって、文字通りのハイフンが必要な場合は、少し異なることを行う必要があります。慣例により、文字通りのハイフンを最初に角かっこで囲みます。

だから私の結果はvar regex = /^[-.\w\d]+$/;

(おそらくお気づきかもしれませんが、正規表現を表現する方法はほとんどの場合複数あり、それが機能します。REweeniesは、a)表現の経済性とb)実行時のパフォーマンスに多くの時間を費やします。 "正しい"。言い換えれば、それはあなたにとって本当に重要ではないので、あなたは私が今言ったことの多くを無視することができます。本当に重要なのは、a)余分なスラッシュを取り除き、b)リテラルハイフンを角かっこ内の最初の文字に移動することだけだと思います。)

(別の考え:アルファベット文字とハイフンを受け入れる場合は非常に頻繁に、アンダースコアも受け入れられます...それで、結局、そのアンダースコアを持つことを本当に意味しましたか?)

(さらに別の考え:識別子の最初の文字がアルファでなければならない場合があります。その場合、おそらく必要なのはvar regex = /^\w[-.\w\d]*$/;、上記の素朴なレシピで許可されているように、どのような場合でも最初の文字に別のルールが必要な場合があります。 "と"。"は長さ1の正当な単語です。)

于 2012-10-01T01:20:12.670 に答える