[A-Za-z!$#%\d\u0100]{6}
соответствует aS1%eĀ
.
\u0100
предназначено для. Вы можете вставить другие коды Юникода, которые вам нужны. Вы можете найти их here.
EDIT: для не менее 6 символов правильное регулярное выражение - [A-Za-z!$#%\d\u0100]{6,}
.
EDIT 2: Чтобы включить диапазон символов Юникода (пусть это будет латинский расширенный-B), регулярное выражение должно выглядеть как ^[A-Za-z!$#%\d\u0100-\u017f]{6,}$
. Вы можете найти коды кода Unicode here.
EDIT 3: Я разработал крошечную функцию, которая проверяет, соответствует ли данный пароль критериям. Вы должны определить диапазон юникодов в функции.
function isValidPassword(password) {
var unicodeRange = "\\u0100-\\u0105";
var criteria = ["A-Z","a-z","\\d","!$#%",unicodeRange];
// check whether it doesn't include other characters
var re = new RegExp("^[" + criteria.join("") +"]{6,}$");
if(!re.test(password)) return false;
var minSatisfiedCondition = 3;
var satisfiedCount = 0;
for(var i=0; i < criteria.length; i++) {
re = new RegExp("[" + criteria[i] + "]");
if(re.test(password)) ++satisfiedCount;
}
return (satisfiedCount >= minSatisfiedCondition);
}
Рабочий образец here.
Почему downvote? OP не хочет создавать вход на основе Javascript, но простое подтверждение, когда пользователь указывает пароль. –
Некоторые старые комментарии о псевдосильных паролях: http://www.codinghorror.com/blog/2005/07/passwords-vs-pass-phrases.html – Douglas
Это не простая задача для регулярного выражения. Как предлагает Сачин в своем ансере, было бы проще написать собственную процедуру разбора строк и подсчитать, соответствуют ли ваши критерии. – splash