Разрешить только строчные буквы в регулярном выражении (вместе с "." И "_", но у меня это уже есть) - PullRequest
0 голосов
/ 18 декабря 2018

Извините, я уверен, что это будет помечено как дубликат, но я не могу заставить мое регулярное выражение работать правильно.

Я хочу, чтобы мое регулярное выражение разрешало только строчные буквы, точки и подчеркивания.Я использую регулярное выражение instagram из шаблонов сообщества, найденных здесь https://regexr.com/3cg7r

Шаблон выглядит так: ^(?!.*\.\.)(?!.*\.$)[^\W][\w.]{0,29}$

Я решил добавить [a-z] в начале шаблона сразу послеморковь "^", но это ничего не сделало.Я пробовал другие способы, такие как [^A-Z], которые, как я думал, будут работать, но не помогли.

Может ли кто-нибудь направить меня в правильном направлении?

Редактировать:

Я хочудля соответствия:

test_handle

test.handle

testhandle

test_._handle

Не хочусовпадение:

Test_handle

test_Handle

test__handle

test..handle

TESTHANDLE

1048 * *

Ответы [ 4 ]

0 голосов
/ 18 декабря 2018

Вы можете попробовать что-то вроде

^(?:[a-z]|([._])(?!\1))+$

Объяснено

 ^                             # BOS
 (?:                           # Repeat many times
      [a-z]                         # a - z
   |                              # or,
      ( [._] )                      # (1), dot or underscore
      (?! \1 )                      # not followed by same
 )+
 $                             # EOS
0 голосов
/ 18 декабря 2018

Попробуйте это регулярное выражение:

^(?!.*\.\.)(?!.*__)(?!.*[A-Z])(?!.*\.$)[^\W][\w.]{0,29}$

Демонстрация RegExr

Я добавил этот негативный взгляд, чтобы запретить символы верхнего регистра:

(?!.*[A-Z])

И этот, чтобы запретить двойное подчеркивание:

(?!.*__)

Еще одна важная вещь, которую следует запомнить, это снять флажок без учета регистра.

enter image description here

0 голосов
/ 18 декабря 2018

Я нашел вашу проблему:

Флаги, которые вы выбрали igm, включают флаг case insensitive.

Чтобы ваше регулярное выражение исключало заглавные буквы, отключите его и попробуйте еще раз с ^[a-z]...

Это должно помочь вам, но прокомментируйте, если вы не можете заставить его работать,Я постараюсь помочь.

0 голосов
/ 18 декабря 2018

В регулярном выражении, с которого вы начинаете, происходит ряд вещей:

^           # 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}$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...