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?
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&.\-]*$/
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
}
Essayez cette expression rationnelle:
/^[\w&.-]+$/
Vous pouvez également utiliser test
.
if ( pattern.test( qry ) ) {
// valid
}
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_ .]*)*$