В регулярном выражении, с которого вы начинаете, происходит ряд вещей:
^ # beginning of line
(?!.*\.\.) # negative lookahead that effectively prevents double periods
(?!.*\.$) # negative lookahead that prevents a period as the last character
[^\W] # first character must be a word character
[\w.]{0,29} # from 0 to 29 word characters or periods
$ # end of line
Кроме того, на основании того, что я вижу в этой ссылке, к нему применены три флага: i
, g
и m
.Единственное последствие на самом деле - i
, потому что это означает поиск без учета регистра.Если вы пытаетесь изменить его, чтобы он учитывал регистр, первое, что вам нужно сделать, это удалить его.
Метасимвол \w
или слово соответствует a-z
, A-Z
, 0-9
и _
.Поэтому, если вы хотите ограничить это, замените его явно символами, которые вы хотите разрешить, что приведет к:
^(?!.*\.\.)(?!.*\.$)[^\W][a-z_.]{0,29}$
Теперь это в основном работает, за исключением того, что первый символ все еще может быть заглавной буквой.Часть [^\W]
по существу соответствует "НЕ НЕ символу слова" или .. "символу слова", который включает заглавные буквы.Я, честно говоря, не уверен в обосновании этого.Но если для вас это не имеет значения, вы, вероятно, можете просто удалить его и увеличить оставшийся диапазон символов до 30, чтобы все еще иметь до 30 символов, оставляя нас окончательно с:
^(?!.*\.\.)(?!.*\.$)[a-z_.]{0,30}$
Редактировать :
Как заметил Дэвид, я не уловил вашего требования запретить несколько подчеркиваний .. не забудьте включить его добавленную обратную ссылку, чтобы учесть это:
^(?!.*\.\.)(?!.*__)(?!.*\.$)[a-z_.]{0,30}$