Je veux une expression régulière qui permet seulement ceci:Une expression régulière rapide nécessaire
letter a-z
case insensitive
allows underscores
allows any nrs
Comment devrait-il être écrit?
Merci
Je veux une expression régulière qui permet seulement ceci:Une expression régulière rapide nécessaire
letter a-z
case insensitive
allows underscores
allows any nrs
Comment devrait-il être écrit?
Merci
Ce serait
\w
si je ne me trompe pas (Comme il se trouve, il dépend: En PHP les meaning of \w
changements avec le locale qui est actuellement en vigueur). Vous pouvez utiliser a more explicit form pour le clouer:
[A-Za-z0-9_]
Je l'utilise dans son contexte, ajouter de début de chaîne et de fin de chaîne anchors et un quantifier qui définit combien de caractères vous permettra:
^[A-Za-z0-9_]+$
if(preg_match('/^[0-9a-z_]+$/i', $string)) {
//if it matches
}
else {
//if it doesn't match
}
[0-9a-z_]
est une classe de caractères qui définit les chiffres de 0 à 9, les lettres a à z et le trait de soulignement. Le i
à la fin rend la correspondance insensible à la casse. ^
et $
sont des ancres qui correspondent respectivement au début et à la fin de la chaîne. Le +
signifie 1 ou plusieurs caractères.
Mauvais. Cela renverra un faux positif si l'entrée contient un caractère valide - même si elle contient également des caractères non valides. – Matt
Bon point - Je suis en train d'éditer ma réponse. –
Cela ne fonctionnerait pas. "a b c d" passerait, car vous recherchez uniquement l'un des caractères de la chaîne à faire correspondre. Modifiez le motif en '/^[0-9a-z _] $/i' et ça marchera. – ceejayoz
PHP:
if (preg_match('/[^a-z0-9_]/i', $input)) {
// invalid input
} else {
// valid input
}
Alors [a-z0-9_]
est un jeu de caractères pour vos caractères valides. L'ajout d'un ^
à l'avant ([^a-z0-9_]
) l'annule. La logique est, si un caractère correspond à quelque chose qui n'est pas dans le jeu de caractères valide, l'entrée est considérée comme invalide.
Le /i
à la fin rend la casse insensible à la casse.
+1 - L'expression rationnelle à tester/lire est parfois la négation. Plutôt que d'autoriser seulement certains caractères, il suffit de tester l'existence d'un caractère invalide. – gnarf
Mais quand le motif est le même (négation de barre), il suffit d'inverser les blocs if/else, ou de mettre un '!' Avant 'preg_match'. Négocier rend la tâche plus facile lorsque vous modifiez le problème, et non lorsque vous écrivez le même motif de façon légèrement différente. –
Comment devrait-il être écrit? (Découpant en plusieurs lignes)
/ # Start RegExp Pattern
^ # Match beginning of string only
[a-z0-9_]* # Match characters in the set [ a-z, 0-9 and _ ] * = Zero or more times
$ # Match end of string
/i # End Pattern - Case Insensitive Matching
vous donnant
if (preg_match('/^[a-z0-9_]*$/i', $input)) {
// input is valid
}
Vous pouvez également utiliser un +
au lieu de *
si vous voulez forcer au moins un caractère aussi bien.
N'est-ce pas sensible à la casse? Votre code qui est (pas l'explication!) –
@Vivin Paliath - Yup! Merci pour le petit coup de coude. – gnarf
C'est bon, pas de problème! :) –
Rien ... Je ne sais pas grand-chose sur l'expression rationnelle –
Quelle langue? Tous ceux dans vos tags? –
php, désolé les gars ... –