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 &-._ seulement. 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. ie chaque fois qu'un caractère autre qu'une lettre, un nombre ou des caractères spéciaux &-._ vient, la chaîne doit être évaluée comme invalide. Comment puis-je faire cela avec une regex?

27
demandé sur Khaleel 2012-12-19 10:23:38

4 réponses

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 vous voulez interdire.

En outre, vous souhaitez inclure le début et la fin de la chaîne placemarkers ^ et $

Mise à Jour:

Comme elclanrs l'a compris (et le reste d'entre nous ne l'a pas fait, initialement), les seuls les caractères spéciaux devant être autorisés dans le modèle sont& -._

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

[\w] est le même as [A-zA-Z0-9_]

Bien que le tiret n'ait pas besoin d'échapper quand il est 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'est-à-dire une valeur vide), remplacez-le par un * à la place:

/^[\w&.\-]*$/
45
répondu Highly Irregular 2012-12-19 06:38:51

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

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

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

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

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

Les tests pour les lettres, les chiffres ou le trait de soulignement peuvent être effectués 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 renvoie un tableau avec ce qui a été apparié), 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

Dans le cas où j'ai mal lu la question, 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
répondu Ja͢ck 2012-12-19 06:45:40

Essayez cette expression rationnelle:

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

Vous pouvez également utiliser test.

if ( pattern.test( qry ) ) {
  // valid
}
10
répondu elclanrs 2012-12-19 06:39:36

Essayez cette RegEx: correspondant charecters 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
répondu chadalavada harish 2017-02-08 04:11:22