次のルールを満たすすべての文字列に一致させたい-
- 小文字と数字とダッシュで構成する必要があります
- 文字または数字で始まる必要があります
- 文字または数字で終わる必要があります
- 文字列の合計の長さは 3 文字以上 20 文字以下にする必要があります
- ドット
.
はオプションです。2 つ以上の連続したドットがあってはなりません.
- ダッシュ
-
はオプションです。連続する 2 つ以上のダッシュがあってはなりません-
- ドット
.
とダッシュ-
を連続させてはなりません // 文字列aaa.-aaabbb
が無効です - アンダースコアは許可されていません
私はこの正規表現を思いつきました:
^[a-z0-9]([a-z0-9]+\.?\-?[a-z0-9]+){1,18}[a-z0-9]$
[a-z0-9] //should start/end with a letter or a number
([a-z0-9]+\.?\-?[a-z0-9]+){1,18} //other rules
ただし、次のようないくつかのシナリオでは失敗しています-
abcdefghijklmnopqrstuvwxyz //should fail total number of chars greater than 20
aaa.-aaabbb //should fail as dot '.' and dash '-' are consecutive
誰でもこの正規表現を修正するのを手伝ってもらえますか?