2017-01-12 5 views
0

мне нужно регулярное выражениеJavascript Regex для пользовательской проверки

1) [A-Z][a-z][0-9] должны включать верхний регистр & строчные буквы, цифры & специальных символов (кроме + и -).

2) Не более двух одинаковых символов в последовательности (например, [email protected] или [email protected] или Google#12 неприемлемо).

Я пробовал это, но не знаю, как проверить 2 одинаковых символа.

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^%*()!&=]).*$ 
+0

Можете ли вы показать нам, что вы пробовали? –

+0

Первое условие звучит так, как будто вы хотите разрешить любой символ, но '+' и '-' на вашем входе. –

+0

@ WiktorStribiżew + и _ не разрешены – user3747168

ответ

1

Вы можете добавить дополнительную проверку (?!.*(.)\1) опережения запретить последовательные символы и заменить .* в конце с [^_+]* (или [^-+]*, если вы имели в виду дефис), чтобы соответствовать любые символы, но _ (или -) и +:

^(?!.*(.)\1)(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^*()!&=])[^_+]*$ 
    ^^^^^^^^^^             ^^^^^ 

(?!.*(.)\1) lookahead соответствует любым символам 0+, отличным от строк, прерывает символы, а затем фиксирует эти символы один за другим и пытается совместить одинаковый символ сразу после них (с помощью \1 обратная связь). Если шаблон найден, полное совпадение не выполнено.

Обратите внимание, что [^_+] может также соответствовать разрыву строк, но я думаю, что это не проблема. В любом случае, вы можете добавить \n\r, чтобы избежать их соответствия.

regex demo

+0

Попробуйте '(?!. * (.) \ 1. * (.) \ 2)'. Разум, который сделает его хуже с точки зрения производительности. –

Смежные вопросы