1

私は正規表現に比較的慣れていないので、問題が発生しました。名前を正規表現したい。最大 100 文字で、少なくとも 2 つのアルファベット文字を含み、文字「-」を許可します。

アルファベット文字のみ、またはアルファベット文字とハイフンの両方をチェックするのに問題はありませんが、「---------」になる可能性のある名前は必要ありません。

ハイフンをチェックしない私のコードは

var nameRegExp = /^([a-z]){2,100}$/;

コードの説明も大歓迎です。ありがとう!

4

2 に答える 2

2

私は推測する

/^(?=.*[a-z].*[a-z])[a-z-]{1,100}$/

先読み部分 ( ^(?=.*[a-z].*[a-z])) は、少なくとも 2 つの文字があるかどうかをチェックします。このパターン (「文字列の開始、それに続く...」) は、正規表現で追加の条件を表現する一般的な方法です。

-@Mikeが指摘したように、否定的なアサーションを追加することで、の数を制限できます。

/^(?=.*[a-z].*[a-z])(?!(?:.*-){11,})[a-z-]{1,100}$/  // max 10 dashes

ただし、「悪い」文字列を禁止しようとするよりも、「良い」文字列に一致する式を書くほうが簡単かもしれません。たとえば、これ

/^[a-z]+(-[a-z]+)*$/

「名前」の適切な近似のように見えます。fooandは許可されますが、 orのようなものは許可されfoo-bar-bazません。----foo----bar----

于 2013-04-07T17:33:22.727 に答える
2

数を制限するには、許可する最大数よりも 1 多い-数である負の先読みを追加できます。3

/^(?!(?:[a-z]*-){3,})(?=-*[a-z]-*[a-z])[a-z-]{2,100}$/
于 2013-04-07T17:58:53.153 に答える