Я пытаюсь создать Regex тест в JavaScript, который будет проверять строку на содержание любого из этих символов:
!$%^&*()_+|~-=`{}[]:";'<>?,./
Подробнее Если интересно :)
Это для довольно крутого приложения для смены пароля, над которым я работаю. Если вам интересно, вот остальная часть кода.
У меня есть таблица, в которой перечислены требования к паролю, и когда конечный пользователь набирает новый пароль, он будет проверять массив Regexes и ставить галочку в соответствующей строке таблицы, если он... подходит :) Мне просто нужно добавить вот это вместо 4-го элемента в массиве validation
.
var validate = function(password){
valid = true;
var validation = [
RegExp(/[a-z]/).test(password), RegExp(/[A-Z]/).test(password), RegExp(/\d/).test(password),
RegExp(/\W|_/).test(password), !RegExp(/\s/).test(password), !RegExp("12345678").test(password),
!RegExp($('#txtUsername').val()).test(password), !RegExp("cisco").test(password),
!RegExp(/([a-z]|[0-9])\1\1\1/).test(password), (password.length > 7)
]
$.each(validation, function(i){
if(this)
$('.form table tr').eq(i+1).attr('class', 'check');
else{
$('.form table tr').eq(i+1).attr('class', '');
valid = false
}
});
return(valid);
}
Да, есть также соответствующая валидация на стороне сервера!
Простым способом достигнуть этого является отрицательный набор [^\\w\s]. Это по существу ловит:
По некоторым причинам [\W\S] не работает тот же путь, это не делает никакой фильтрации. Комментарий Zael на одном из ответов обеспечивает что-то вроде объяснения.