2017-07-28 25 views
1

私は正規表現を書いてきました:アルファを持つ正規表現、ハイフン、アンダースコアおよびドット文字

/^[a-zA-Z\-\_\. ]{2,60}$/ 

それは細かいっぽい動作しますが、それも可能に---または___か...または-_ 。入力として(少なくとも2アルファなしで)入力され、私はそれを望んでいません。たとえば、私は-aa、a-a、aa ---(他の文字と同様)を持つことができます。

文字列に少なくとも2つのアルファベットが必要であり、ハイフンと他の2つの非アルファベット記号は、文字列のどこにでも置くことができます。

+0

あなたはルールを明確にしてくださいもらえますか?文字列のどこにいても少なくとも2アルファですか?または文字がない文字列を禁止するだけですか? –

+0

明確にするには、最低2文字のアルファベット文字が必要ですか?そして、ハイフン、アンダースコア、ピリオド、およびスペースが混在していることがありますか? – Shiva

+0

申し訳ありません、文字列に少なくとも2アルファ。これが要件です。 –

答えて

1

使用

/^(?=(?:[^a-zA-Z]*[a-zA-Z]){2})[-_. a-zA-Z]{2,60}$/ 

regex demo

詳細参照してください:

  • ^ - 文字列
  • (?=(?:[^a-zA-Z]*[a-zA-Z]){2})の開始 - 文字列中に少なくとも2つのアルファ文字(つまりを、厳密に2連続しなければならないTIVE出現:
    • [^a-zA-Z]* - ASCII文字以外のゼロ以上の文字
    • [a-zA-Z] - ASCII文字)
  • [-_. a-zA-Z]{2,60} - 許容文字
  • $
  • の2~60発生 - の終わり文字列

-の場合はエスケープする必要はありません。キャラクタークラスのタート/エンド。 _は単語の文字であり、どこにでもエスケープする必要はありません。 .は、文字クラス内でエスケープする必要はありません。 ^アンカー後(?!(?:[^._-]*[._-]){11})否定先読みを追加し、文字列に最大10個まで._-文字を制限するために、正規表現エンジンを伝えるために

/^(?!(?:[^._-]*[._-]){11})(?=(?:[^a-zA-Z]*[a-zA-Z]){2})[-_. a-zA-Z]{2,60}$/ 
+0

10個のハイフンやドット、または嫌いなものを10個まで追加できますか? –

+0

はい、 '(?!(?:[^ ._-] * [._-]){11})'の後に '^'を追加してください。 –

+0

甘い、それは働いた。乾杯。 –

関連する問題