Подтвердить что ты не робот

Соответствие специальных символов и букв в регулярном выражении

Я пытаюсь проверить строку, которая должна содержать только буквы и специальные символы &-._. Для этого я попытался с регулярным выражением.

var pattern = /[a-zA-Z0-9&_\.-]/
var qry = 'abc&*';
if(qry.match(pattern)) {
    alert('valid');
}
else{
    alert('invalid');
}

При использовании вышеуказанного кода строка abc&* действительна. Но мое требование - показать это недействительным. т.е. всякий раз, когда появляется символ, отличный от буквы, появляется число или специальные символы &-._, строка должна оцениваться как недействительная. Как я могу это сделать с помощью регулярного выражения?

4b9b3361

Ответ 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 @"); // правда