Как сделать это regex safari / iOS совместимым? - PullRequest
1 голос
/ 08 июля 2019

Я использую это регулярное выражение для проверки имен пользователей для моего приложения.3-20 символов, буквенно-цифровые и подчеркивания.Не начинается и не заканчивается подчеркиванием и не имеет двух последовательных подчеркиваний.

username.search(/^(?=.{3,20}$)(?![_])(?!.*[_]{2})[a-zA-Z0-9_]+(?<![_])$/)

Но в iOS / safari возникает ошибка с этой ошибкой:

SyntaxError: Недопустимое регулярное выражение: недопустимое имя спецификатора группы

Как заставить это регулярное выражение работать во всех основных браузерах?

Ответы [ 3 ]

2 голосов
/ 08 июля 2019

Вы можете опустить отрицательный вид сзади в конце, но также опустить 2 других отрицательных взгляда (?![_])(?!.*[_]{2}) и использовать только один в начале, чтобы проверить длину 3 - 20.

Вместо2 отрицательных просмотра, вы можете соответствовать 1+ раз [a-zA-Z0-9], чтобы строка не могла начинаться с подчеркивания.

Затем используйте повторяющийся шаблон для сопоставления одного _, а затем снова 1+ раз [a-zA-Z0-9], чтобы строка не заканчивалась подчеркиванием.

^(?=.{3,20}$)[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)+$

См. Regex demo

0 голосов
/ 08 июля 2019

Я предполагаю, что вы могли бы упростить и попробовать, например, выражение, подобное:

^(?![_])(?!.*[_]{2})[a-zA-Z0-9_]{2,19}[a-zA-Z0-9]$
0 голосов
/ 08 июля 2019

Из моего прошлого опыта использования отрицательный взгляд на в Javascript не очень хорошо поддерживается.

Вы можете увидеть, что браузеры не поддерживают его на . Могу ли я использовать веб-сайт. Веб-сайт Regex Pal также показывает ошибку для этого и рекомендует не использовать ее.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...