2014-10-08 3 views
0

Я получаю сообщение об ошибке «Ничего не повторять» /^ [az] + [AZ] + [0-9] + [^ A-Za-z0-9] + {8,} $/, когда я запускаю это через функцию string.match() или при использовании http://jsregex.com (вы можете просто скопировать код вставить). Регулярное выражение пытается удостовериться, что строка имеет длину не менее 8 символов, включая нижний регистр a-z, верхний регистр a-z, по крайней мере одну цифру и одну букву/номер (специальный символ).Ничего не повторять Javascript regex

В предыдущих сообщениях упоминаются специальные символы, но у меня их нет в этом шаблоне, поэтому немного запутался, почему он не работает.

+0

проблема заключается в том, что вы применяете два кванторы ('+', '{8,}') к одному выражению. Он должен иметь только один квантификатор – hindmost

+0

Даже если вы исправите свое регулярное выражение, сделав его '/^[az] + [AZ] + [0-9] + [^ A-Za-z0-9] {8,} $ /' Я подозреваю, что это неправильно. – anubhava

ответ

1
(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^\w]|_)).{8,} 

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

DEMO

+0

Когда я пробую это на jsregex.com, этот код, похоже, соответствует даже «deFs.0», но это не 8 символов? Но я согласен с тем, что ваше демо работает. – Ukuser32

+0

@ Ukuser32 ах! Теперь он работает –

+0

Супер спасибо - и хотя репутация действительно не нужна - имейте в любом случае :) – Ukuser32

0

Почему {8,} здесь?

Там нет ничего между + и {8,}

Я думаю, что вы хотите это: /^[a-z]+[A-Z]+[0-9]+[^A-Za-z0-9]{8,}$/

+0

Мне нужно, чтобы оно состояло как минимум из 8 символов. – Ukuser32

3

Потерять + перед {8,}. Они избыточны.

{8,} пытается повторить то, что было раньше. Так как это +, ему нечего повторять. Отсюда и ошибка. Вы получите то же самое, если попробуете a++, или a{1}{2}, или любую комбинацию повторителей (кванторов), сразу прилегающих друг к другу.

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

кажется гораздо проще, читаемым, и ремонтопригоден просто сказать

/[a-z]/.test(str) && 
/[A-Z]/.test(str) && 
/[0-9]/.test(str) && 
/[^a-zA-Z0-9]/.test(str) && 
str.length >=8 

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

+0

Итак, как бы я установил эту строку, поскольку она должна быть длиной не менее 8 символов и содержать несимметричный символ? Когда я протестировал ваше предложение, он все еще не работал. – Ukuser32

0

/^ [AZ] + [AZ] + [0-9] + [^ A-Za-z0-9] + {8} $/неверно (+ {8}) изменение

/^ [AZ] + [AZ] + [0-9] + [^ A-Za-z0-9] {8} $/

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