2009-10-26 5 views
0

J'ai besoin d'une expression régulière pour permettre à l'utilisateur d'entrer une chaîne alphanumérique qui commence par une lettre (pas un chiffre).Expression régulière (alphanumérique)

+1

Si vous ne comprenez pas les modèles RegEx, vous devriez vous pencher sur les outils qui les aident à les expliquer, comme par exemple les modèles expresso et regex. – dlamblin

+0

+1 pour RegexBuddy –

Répondre

10

Cela devrait fonctionner dans des moteurs d'expressions régulières (RE). Il y a une plus belle syntaxe dans le monde PCRE mais je préfère la mienne pour pouvoir courir partout:

^[A-Za-z][A-Za-z0-9]*$ 

Fondamentalement, le premier caractère doit être alpha, suivie par zéro ou plusieurs caractères alphanumériques. Les balises de début et de fin sont là pour s'assurer que toute la ligne est appariée. Sans ceux-ci, vous pouvez faire correspondre le AB12 de la chaîne "@@@AB12!!!".

explication complète:

^   start tag. 
[A-Za-z]  any one of the upper/lower case letters. 
[A-Za-z0-9] any one of the upper/lower case letters or digits, 
*   repeated zero or more times. 
$   end tag 

Mise à jour:

Comme Richard Szalay souligne à juste titre, cela est uniquement l'ASCII (ou, plus exactement, tout schéma de codage où l'AZ, az et 0- 9 groupes sont contigus) et seulement pour les lettres "anglaises". Si vous voulez de vrais RE internationalisés (vous seul savez si c'est une exigence), vous devrez utiliser l'un des moteurs RE les plus appropriés, comme le PCRE mentionné ci-dessus, et vous assurer qu'il est compilé pour le mode Unicode. Ensuite, vous pouvez utiliser des "caractères" tels que \p{L} et \p{N} pour les lettres et les chiffres respectivement. Je pense que le RE dans ce cas serait:

^\p{L}[\pL\pN]*$ 

mais je ne suis pas certain. Je n'ai jamais utilisé les RE pour nos logiciels internationalisés. Voir here pour plus que ce que vous avez toujours voulu savoir sur PCRE.

+0

ya ça fonctionne M.Paxdiablo merci beaucoup –

+0

Pour info, cette syntaxe est limitée au jeu de caractères ASCII. –

1

Je pense que cela devrait faire le travail:

^[A-Za-z][A-Za-z0-9]*$ 
+0

Pourquoi avez-vous inclus la balise de début mais pas la fin? J'aurais pensé que vous les laisseriez tous les deux (ce qui fonctionnera dans les appels qui correspondent à une ligne entière de toute façon) ou les mettriez tous les deux (ce qui fonctionnera dans les appels de match ou de match de ligne). – paxdiablo

+0

OK. Ajoutée. Tu as raison. –

0

Vous cherchez un modèle comme celui-ci:

^[a-zA-Z][a-zA-Z0-9]*$ 

Que l'on exige une lettre et un certain nombre de lettres/chiffres après . Vous voudrez peut-être ajuster les longueurs autorisées.

+0

merci Mr.ojrac ça marche –