1

次の文字列の正規表現を作成したい

abc.xy9.aBBB-hhh7.abcDD_XYz

あれは、

  • 最初の文字は小文字でなければなりません
  • 最後の文字は小文字/数字にする必要があります
  • との間[A-Za-z0-9-_].

ただし、入力文字列には少なくとも 3 文字、最大で 63 文字が含まれます。以下の表現を確認してください

^((\\.?([a-z]{1})([A-Za-z0-9_-]*)([a-z0-9]{1}))*){3,63}$
4

3 に答える 3

1
^(([a-z][A-Za-z0-9_-]+[a-z0-9]\.)+[A-Za-z0-9_-]*[a-z0-9]|[a-z][A-Za-z0-9_-]+[a-z0-9])$

一致する場合は、長さを確認します (たとえば、PHP では preg_match が > 0 を返すことを確認し、strlen で合計の長さを確認します)。

ここでは、あなたの例から、各グループが文字列全体の終わりだけでなく、小文字または数字で終わっていると想定しています

于 2013-07-23T14:49:35.903 に答える
1

あなたはすでに説明を与えました:

最初の文字は小文字:[a-z] 最後は小文字または数字: 中間[a-z0-9] : [A-Za-z0-9-_.]

3 文字以上、最大 63 文字は、中間の正規表現を 1 ~ 61 回繰り返さなければならないことを意味します。

一緒:

[a-z][A-Za-z0-9_.-]{1,61}[a-z0-9]

ただし、文字列を囲む文字や数字とは異なるものが必要です。それがなければ、この正規表現一致します。たとえば、次のようになります。

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

これは、正規表現が 63 個の a を見つけて、その一致を主張できるためです。

于 2013-07-23T14:25:43.623 に答える