web-dev-qa-db-fra.com

Correspondance des caractères spéciaux et des lettres dans regex

J'essaie de valider une chaîne, qui devrait contenir des lettres, des chiffres et des caractères spéciaux &-._ uniquement. Pour cela j'ai essayé avec une expression régulière.

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

Lors de l'utilisation du code ci-dessus, la chaîne abc&* est valide. Mais mon exigence est de montrer cette invalide. C'est-à-dire que lorsqu'un caractère autre qu'une lettre, un nombre ou des caractères spéciaux &-._ vient, la chaîne doit être considérée comme non valide. Comment puis-je faire cela avec une regex? 

28
Khaleel

Ajoutez-les aux caractères autorisés, mais vous devrez en échapper certains, tels que -]/\

var pattern = /^[a-zA-Z0-9!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/

De cette façon, vous pouvez supprimer tout caractère individuel que vous souhaitez interdire.

En outre, vous souhaitez inclure les repères de début et de fin de chaîne ^ et $

Mettre à jour:

Comme l’ont compris ses amis (et le reste d’entre nous, au début), les seuls caractères spéciaux devant être autorisés dans le modèle sont & -._

/^[\w&.\-]+$/

[\ w] est identique à [a-zA-Z0-9_]

Bien que le tiret n'ait pas besoin d'être échappé au début ou à la fin de la liste, je préfère le faire au cas où d'autres caractères seraient ajoutés. De plus, le + signifie que vous avez besoin d'au moins un des caractères listés. Si zéro est ok (c.-à-d. Une valeur vide), remplacez-le par un * à la place:

/^[\w&.\-]*$/
46
Highly Irregular

Eh bien, pourquoi ne pas simplement les ajouter à votre classe de personnage existante?

var pattern = /[a-zA-Z0-9&._-]/

Si vous avez besoin de vérifier si une chaîne ne contient que ces caractères, vous devez également anchor l'expression:

var pattern = /^[a-zA-Z0-9&._-]+$/

Les ^ et $ ajoutés correspondent respectivement au début et à la fin de la chaîne.

Le test pour les lettres, les chiffres ou le trait de soulignement peut être fait avec \w qui raccourcit votre expression:

var pattern = /^[\w&.-]+$/

Comme mentionné dans le commentaire de Nathan, si vous n'utilisez pas les résultats de .match() (il retourne un tableau avec ce qui a été mis en correspondance), il est préférable d'utiliser RegExp.test() qui renvoie un simple booléen:

if (pattern.test(qry)) {
    // qry is non-empty and only contains letters, numbers or special characters.
}

Mise à jour 2

Si j'ai mal compris la question, le ci-dessous vérifiera si les trois conditions distinctes sont remplies.

if (/[a-zA-Z]/.test(qry) && /[0-9]/.test(qry) && /[&._-]/.test(qry)) {
   // qry contains at least one letter, one number and one special character
}
16
Ja͢ck

Essayez cette regex:

/^[\w&.-]+$/

Aussi, vous pouvez utiliser test.

if ( pattern.test( qry ) ) {
  // valid
}
10
elclanrs
let pattern = /^(?=.*[0-9])(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9!@#$%^&*]{6,16}$/;

//following will give you the result as true(if the password contains Capital, small letter, number and special character) or false based on the string format

let reee =pattern .test("helLo123@");   //true as it contains all the above
0
Amrutha VS

Essayez ce RegEx: faire correspondre les caractères spéciaux que nous utilisons dans les paragraphes et les alphabets

   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_ .]*)*$
0
chadalavada harish