2015-10-09 2 views
0

Я новичок в jquery и пытаюсь использовать проверку пароля довольно простой сложности.jQuery метод для проверки пароля с определенными правилами

Пароль должен быть не менее 7 символов, имеет как минимум 1 верхний регистр, имеет как минимум 1 строчный регистр и не менее 1 цифры ИЛИ специального символа.

Этот вопрос очень похож на this answer Я нашел, однако у меня возникли проблемы с добавлением части «цифры ИЛИ специального символа».

Я думаю, что это регулярное выражение, которого я просто не получаю. Мое изменение этого ответа выглядит так:

$.validator.addMethod("pwcheck", function(value) { 
return /^[A-Za-z0-9\d=!\[email protected]_*]*$/.test(value) // consists of only these 
    && /[a-z]/.test(value) // has a lowercase letter 
    && /[A-Z]/.test(value) //has an uppercase letter 
    && (/\d/.test(value) || /[email protected]#$%^&*_-+=[]\{}|;':",.<> /.test(value) 
     // has a digit or special char 
}); 
+0

У вас есть ошибка синтаксиса. Проверьте скобки. В тесте с цифрой есть открытая скобка, без сближения. Эта ошибка должна появиться в вашей консоли JavaScript. – Sparky

+0

Плакат выше меня - волшебник. Ударь меня к удару. –

+0

С помощью [вашего последнего изменения] (http://stackoverflow.com/revisions/33043286/2) вы полностью изменили предпосылку исходного вопроса ...это нарушает любые ответы, которые уже были опубликованы. Я возвращаю его обратно. – Sparky

ответ

2

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

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

$.validator.addMethod("pwcheck", function(value) { 
    return /[A-Z]+[a-z]+[\d\W]+/.test(value) 
}); 

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

AFDSabcd1435 

, но не такие вещи, как

aA5fdHD14z 

Чтобы иметь более точную проверку, он должен выглядеть примерно этого

$.validator.addMethod("pwcheck", function(value) { 
    return /[A-Z]+/.test(value) && /[a-z]+/.test(value) && 
    /[\d\W]+/.test(value) && /\S{7,}/.test(value); 
}); 

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

Вот пример, который вы можете проверить с помощью функции JavaScript.

function testValue(string) { 
    return /[A-Z]+/.test(string) && /[a-z]+/.test(string) && 
    /[\d\W]/.test(string) && /\S{7,}/.test(string) 
} 

testValue("aGFbsdf4") 
=> true 
+0

Спасибо также :) Есть ли лучшее регулярное выражение для любого специального символа? Вместо того, чтобы перечислять их все, как я? – iaacp

+0

Отлично, именно то, что я искал, чтобы улучшить. Благодаря! – iaacp

+0

Хорошая работа с регулярным выражением. – Sparky

2

EDIT: Следующий ответ для original version of the OP.


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

Эта линия ...

&& (/\d/.test(value) || /[email protected]#$%^&*_-+=[]\{}|;':",.<> /.test(value) 

должно быть ...

&& /\d/.test(value) || /[email protected]#$%^&*_-+=[]\{}|;':",.<> /.test(value) 

или

&& (/\d/.test(value) || /[email protected]#$%^&*_-+=[]\{}|;':",.<> /.test(value)) 
+0

Ударьте меня на удар в разделе комментариев. Плюс 1 –

+0

@ Рихард Гамильтон, хотя мы оба, вероятно, должны были проголосовать за закрытие ОП по причине «опечатки». – Sparky

+0

Спасибо Sparky. Есть ли лучший способ улучшить регулярное выражение? Это моя главная забота. – iaacp

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