Соответствие специальных символов и букв в регулярном выражении
Я пытаюсь проверить строку, которая должна содержать только буквы и специальные символы &-._
. Для этого я попытался с регулярным выражением.
var pattern = /[a-zA-Z0-9&_\.-]/
var qry = 'abc&*';
if(qry.match(pattern)) {
alert('valid');
}
else{
alert('invalid');
}
При использовании вышеуказанного кода строка abc&*
действительна. Но мое требование - показать это недействительным. т.е. всякий раз, когда появляется символ, отличный от буквы, появляется число или специальные символы &-._
, строка должна оцениваться как недействительная. Как я могу это сделать с помощью регулярного выражения?
Ответы
Ответ 1
Добавьте их к допустимым символам, но вам нужно избежать некоторых из них, таких как -]/\
var pattern = /^[[email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/
Таким образом вы можете удалить любой отдельный символ, который хотите запретить.
Кроме того, вы хотите включить начало и конец указателей строк и $
Update:
Как понимали elclanrs (а остальные из нас не были изначально), единственными специальными символами, которые должны быть разрешены в шаблоне, являются & -._
/^[\w&.\-]+$/
[\ w] совпадает с [a-zA-Z0-9 _]
Хотя тире не требуется экранирование, когда оно находится в начале или конце списка, я предпочитаю делать это в случае добавления других символов. Кроме того, символ + означает, что вам нужен хотя бы один из перечисленных символов. Если нуль в порядке (т.е. Пустое значение), замените его вместо: *:
/^[\w&.\-]*$/
Ответ 2
Хорошо, почему бы просто не добавить их в существующий класс символов?
var pattern = /[a-zA-Z0-9&._-]/
Если вам нужно проверить, состоит ли строка из ничего, кроме тех символов, которые вы должны: anchor:
var pattern = /^[a-zA-Z0-9&._-]+$/
Добавленные ^
и $
соответствуют началу и концу строки соответственно.
Тестирование букв, цифр или подчеркивания может быть выполнено с помощью \w
, которая сокращает ваше выражение:
var pattern = /^[\w&.-]+$/
Как упоминалось в комментарии от Nathan, если вы не используете результаты из .match()
(он возвращает массив с тем, что было сопоставлено), лучше использовать RegExp.test()
, который возвращает простое логическое значение:
if (pattern.test(qry)) {
// qry is non-empty and only contains letters, numbers or special characters.
}
Обновление 2
В случае, если я неправильно прочитал вопрос, ниже будет проверено, выполнены ли все три отдельных условия.
if (/[a-zA-Z]/.test(qry) && /[0-9]/.test(qry) && /[&._-]/.test(qry)) {
// qry contains at least one letter, one number and one special character
}
Ответ 3
Попробуйте это регулярное выражение:
/^[\w&.-]+$/
Также вы можете использовать test
.
if ( pattern.test( qry ) ) {
// valid
}
Ответ 4
Попробуйте этот RegEx: сопоставление специальных charecters, которые мы используем в абзацах и алфавитах
Javascript : /^[a-zA-Z]+(([\'\,\.\-_ \/)(:][a-zA-Z_ ])?[a-zA-Z_ .]*)*$/.test(str)
.test(str) returns boolean value if matched true and not matched false
c# : ^[a-zA-Z]+(([\'\,\.\-_ \/)(:][a-zA-Z_ ])?[a-zA-Z_ .]*)*$
Ответ 5
let pattern =/^(?=.[0-9])(?=.[[email protected]#$%^&])(?=.[az])(?=.[AZ])[a-zA- ! Z0-9 @# $% ^ &] {6,16} $/;
//следующий результат даст вам значение true или false в зависимости от формата строки
let reee = pattern.test("helLo123 @"); // правда