2016-09-27 8 views
1

я имею следующий код подтверждения:JQuery не работает, как ожидалось

function validPassword(password) 
{ 
    var regex = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#-?&])[A-Za-z\[email protected]$!%*#-?&]{8,}$/; 
    var valid = regex.test(password); 
    return valid; 
} 

требование является: минимальных длиной 8 символов, 1 специального символа, 1 буквенного символа, 1 номер минимума.

Я не знаком с регулярным выражением, однако валидация не работает с 12345678a - по какой-то причине обнаружение специального символа не работает. любые идеи? спасибо

+0

Вы должны избегать специальных символов, чем имеющих смысловое значение, в данном случае '-' в специальной части char (возможно, другие) –

+0

Изменить тире посередине: https://regex101.com/r/gE6yM7/2 – Jan

+0

Кроме того, почему double '$'? Откуда у вас это регулярное выражение? Я видел много вопросов с одним и тем же двойным '' 'в них. –

ответ

1

Проблема заключается в наличии unescaped hyphen в середине класса символов, который действует как диапазон между предыдущим и следующим символом.

Вы можете использовать это регулярное выражение, чтобы исправить это:

/^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#?&-])[A-Za-z\[email protected]$!%*#?&-]{8,}$/ 

RegEx Demo

Обратите внимание, как дефис помещается в конце класса символов в упреждающей выборке и в матче в настоящее время.

Вы также можете поместить несвязанный дефис в начале.