Comment puis-je obtenir une regex pour vérifier qu'une chaîne de caractères ne contient que les caractères alphabétiques [a-z] ou [A-Z]?
Je suis en train de créer une regex pour vérifier qu'une chaîne donnée a seulement des caractères alphanumériques (a-z ou A-Z. La chaîne peut être jusqu'à 25 caractères. (Je ne suis pas sûr si la regex pouvez vérifier la longueur des chaînes)
Exemples:
1. "abcdef" = true;
2. "a2bdef" = false
;
3. "333" = false;
4. "j" = true;
5. "aaaaaaaaaaaaaaaaaaaaaaaaaa" = false;
//26 lettres
Voici ce que j'ai jusqu'à présent... peut pas comprendre ce qui ne va pas avec elle si
Regex alphaPattern = new Regex("[^a-z]|[^A-Z]");
Je pense que cela voudrait dire que la chaîne pourrait contenir uniquement des lettres majuscules ou minuscules de a à z, mais quand je le faire correspondre à une chaîne avec toutes les lettres, elle retourne false...
Aussi, des suggestions concernant l'efficacité de l'aide de regex vs d'autres méthodes de vérification de serait grandement apprécié.
Vous devez vous connecter pour publier un commentaire.
^
signifie "commencer correspondant au début de la chaîne"[a-zA-Z]
signifie "match de minuscules et de majuscules a-z"{1,25}
signifie "correspond à l'élément précédent (la classe de caractères, voir ci-dessus) 1 à 25 fois"$
signifie "seulement si le curseur est à la fin de la chaîne"RegexOptions.MultiLine
à clarifier le sens de l' ^ et $ caractères. Sinon, la condition de l'expression semble parfait. +1Facile à faire que beaucoup d'autres ont indiqué à l'aide de ce que l'on appelle "les classes de personnage". Essentiellement, ces éléments nous permettent de spécifier une plage de valeurs à utiliser pour la correspondance:
(NOTE: par souci de simplification, je suis en supposant que implict ^ et $ ancres qui sont expliquées plus loin dans ce post)
[a-z] correspond à aucune lettre minuscule.
ex: un des matches, 8 ne correspond pas
[A-Z] Correspondre à une seule lettre majuscule.
ex: Un des allumettes, un ne correspond pas à
[0-9] correspond à n'importe quel chiffres de zéro à neuf
ex: 8 matchs, un ne correspond pas à
[aeiou] Match seulement sur a ou e ou i ou o ou u.
ex: o correspond, z ne correspond pas
[a-zA-Z] Match tout seul en minuscule OU majuscule.
ex: Un des allumettes, un matchs, 3 ne correspond pas à
Ceux-ci peuvent, naturellement, être niée en tant que bien:
[^a-z] Correspondent à rien de ce qui n'est PAS une lettre minuscule
ex: 5 matchs, Un des allumettes, un ne correspond pas à
[^A-Z] Correspondent à rien de ce qui n'est PAS une lettre majuscule
ex: 5 matchs, Un n'a pas de résultats trouvé, un des matchs
[^0-9] Correspondent à rien de ce qui n'est PAS un nombre
ex: 5 ne correspond pas, A correspond à, correspond à un
[^Aa69] Correspondre à n'importe quoi tant que c'est pas Un ou une ou 6 ou 9
ex: 5 matchs, Un ne correspondent pas, ce n'est pas un match, 3 matchs
À voir en commun certaines classes de personnage, allez à:
http://www.regular-expressions.info/reference.html
Vous pouvez absolument vérifier "longueur", mais pas dans la façon dont vous pouvez l'imaginer. Nous mesurons la répétition, PAS de longueur strictement parlant, à l'aide de {}:
un{2} Correspondre à deux d'un ensemble.
ex: un ne correspond pas, aa matches, l'aca ne correspond pas
4{3} Match trois 4 de l'ensemble.
ex: 4 ne correspond pas, 44 ne correspond pas, 444 matches, 4434 ne correspond pas
La répétition a des valeurs, nous pouvons avoir des limites inférieures et supérieures:
a{2,} Match sur deux ou plus de l'ensemble.
ex: un ne correspond pas, aa correspond, aaa correspond, aba ne correspond pas, aaaaaaaaa correspond
un{2,5} Match sur deux à cinq de l'ensemble.
ex: un ne correspond pas, aa correspond, aaa correspond, aba ne correspond pas, aaaaaaaaa ne correspond pas
Répétition s'étend aux classes de personnage, donc:
[a-z]{5} Match de cinq caractères minuscules ensemble.
ex: bubba matches, Bubba ne correspond pas, BUBBA ne correspond pas, asdjo correspond
[A-Z]{2,5} Match de deux à cinq caractères majuscules ensemble.
ex: bubba ne correspond pas, Bubba ne correspond pas, BUBBA matches, BUBBETTE ne correspond pas
[0-9]{4,8} Match de quatre à huit chiffres.
ex: bubba ne correspond pas, 15835 matches, 44 ne correspond pas, 3456876353456 ne correspond pas
[a3g]{2} Correspondre à un OU 3 OU g si elles se présentent deux fois ensemble.
ex: aa correspond, ba n'a pas de match, 33 matchs, 38 ne correspond pas, a3 NE correspond PAS
Examinons maintenant votre regex:
[^a-z]|[^A-Z]
Traduction: Match n'importe quoi tant que ce n'est PAS une lettre minuscule OU une majuscule.
Régler le problème, alors qu'il répond à vos besoins, nous réécrire pour qu'elle ressemble à ceci:
Étape 1: Supprimer la négation
[a-z]|[A-Z]
Traduction: Trouver toute lettre minuscule OU une majuscule.
Étape 2: bien que pas strictement nécessaire, nous allons nettoyer le OU logique un peu
[a-zA-Z]
Traduction: Trouver toute lettre minuscule OU une majuscule. Même que ci-dessus mais maintenant, en utilisant un seul jeu de [].
Étape 3: Maintenant, nous allons indiquer "longueur"
[a-zA-Z]{1,25}
Traduction: Trouver toute lettre minuscule OU une majuscule répété une à vingt-cinq fois.
C'est là que les choses deviennent funky. Vous pourriez penser que vous avez été fait ici et vous pourriez bien être en fonction de la technologie que vous utilisez.
Strictement parlant, les regex [a-zA-Z]{1,25} corresponde à celui de vingt-cinq supérieure ou inférieure de la casse des lettres n'importe où sur une ligne:
[a-zA-Z]{1,25}
un des allumettes, aZgD matches, BUBBA matches, 243242hello242552 CORRESPOND
En fait, tous les exemples que j'ai donné jusqu'à présent de faire de même. Si c'est ce que vous voulez, alors vous êtes en bonne forme mais en fonction de votre question, je suppose que vous voulez SEULEMENT un à vingt-cinq supérieure ou inférieure de la casse des lettres (sur l'ensemble de la ligne. Pour que nous nous tournons vers des ancres. Les ancres permettent de spécifier ces satanés détails:
^ début d'une ligne
(Je sais, nous avons juste utilisé ce pour la négation plus tôt, ne me lancez pas)
$ fin d'une ligne
Nous pouvons les utiliser comme ceci:
^a{3} Depuis le début de la ligne correspondent à un ensemble trois fois
ex: aaa correspond, 123aaa ne correspond pas, aaa123 correspond
un{3}$ Correspondent à un ensemble trois fois à la fin d'une ligne
ex: aaa correspond, 123aaa matches, aaa123 ne correspond pas
^a{3}$ Correspondent à un ensemble trois fois pour le ENSEMBLE ligne
ex: aaa correspond, 123aaa ne correspond pas, aaa123 ne correspond pas
Avis que aaa correspond dans tous les cas, parce qu'il a trois a au début et à la fin de la ligne techniquement parlant.
Donc au final, techniquement bonne solution, pour trouver un "mot" que "jusqu'à cinq caractères" sur une ligne serait:
^[a-zA-Z]{1,25}$
Le funky, c'est que certaines technologies mis implicitement ancres dans la regex pour vous et pas d'autres. Vous avez juste à tester votre regex ou de lire les docs pour voir si vous avez implicite ancres.
Regexes ceartanly pouvez vérifier la longueur d'une chaîne - comme le montrent les réponses postées par les autres.
Toutefois, lorsque vous êtes à la validation d'une saisie de l'utilisateur (par exemple, un nom d'utilisateur), je vous conseille de faire vérifier séparément.
Le problème, c'est que la regex ne peux que vous dire si une chaîne correspondant ou non. Il ne dira pas pourquoi il n'a pas de match. A été le texte est trop long ou elle contenait unallowed caractères - vous ne pouvez pas dire. C'est loin d'être amical, lorsqu'un programme dit: "Le nom d'utilisateur fourni contenait des caractères non valides ou a été trop longtemps". Au lieu de cela, vous devriez fournir des messages d'erreur pour différentes situations.
L'expression régulière que vous utilisez est une alternance de
[^a-z]
et[^A-Z]
. Et les expressions[^…]
moyenne pour correspondre à n'importe quel caractère autre que ceux décrits dans le jeu de caractères.L'ensemble de sorte que votre expression signifie pour correspondre à tout caractère autre qu'
a-z
ou autres queA-Z
.Mais vous avez plutôt besoin d'une expression régulière qui correspond à
a-zA-Z
seulement:Et pour spécifier la longueur de l'ancrage de l'expression avec le début (
^
) et la fin ($
) de la chaîne et de décrire la longueur avec la{
n
,
m
}
quantificateur, ce qui signifie au moinsn
mais pas plus dem
répétitions:Dois-je comprends bien qu'il ne peut contenir que des soit majuscules ou lettres minuscules?
Une expression régulière semble être la bonne chose à utiliser pour ce cas.
Par la voie, l'accent circonflexe ("^") à la première place à l'intérieur d'une classe de caractère signifie "non", de sorte que votre "
[^a-z]|[^A-Z]
" signifie "n'importe quelle lettre minuscule, ou pas tout en majuscules lettre" (sans prendre en compte que a-z ne sont pas toutes les lettres).Il existe d'excellents outils interactifs pour développer et tester des expressions régulières:
Ils sont une grande aide, car ils vous le dire tout de suite si votre expression fonctionne comme prévu et même vous permettre de naviguer et de débogage.