regex pour alphanumériques, mais au moins un caractère

dans mon asp.net page, j'ai une boîte de saisie qui doit avoir la validation suivante:

doit être alphanumérique, avec au moins un caractère (c.-à-d. ne peut pas être tous les numéros).

18
demandé sur casperOne 2009-06-27 06:25:57

6 réponses

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

cela signifie essentiellement:"

  • Zéro ou plusieurs caractères ASCII;
  • un caractère ASCII alphabétique;
  • zéro ou plus caractères alphanumériques ASCII.

essayez quelques tests et vous verrez que cela passera toutes les chaînes alphanumériques ASCII où au moins un caractère ASCII non numérique est requis.

La clé, c'est la \d* à l'avant. Sans lui, le regex devient beaucoup plus embarrassant à faire.

53
répondu cletus 2015-04-04 15:51:24

la plupart des réponses à cette question sont correctes, mais il y a une alternative, qui (dans certains cas) offre plus de flexibilité si vous voulez changer les règles plus tard:

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$

cela correspond à n'importe quelle séquence de caractères alphanumériques, mais seulement si le premier groupe correspond également à la séquence entière. C'est un truc peu connu dans les expressions régulières qui vous permet de gérer des problèmes de validation très difficiles.

par exemple, vous dites besoin d'ajouter une autre contrainte: la chaîne doit être entre 6 et 12 caractères. Les solutions évidentes affichées ici ne fonctionneraient pas, mais en utilisant le tour de l'avenir, le regex devient simplement:

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
18
répondu Philippe Leybaert 2009-06-28 19:35:09
^[\p{L}\p{N}]*\p{L}[\p{L}\p{N}]*$

explication:

  • [\p{L}\p{N}]* correspond à zéro ou plusieurs caractères des lettres ou des chiffres
  • \p{L} correspond à une lettre
  • [\p{L}\p{N}]* correspond à zéro ou plus de lettres ou de chiffres Unicode
  • ^ et $ ancrent la corde, en s'assurant que le regex correspond à la corde entière . Vous pouvez être en mesure de les omettre, selon quelle fonction de correspondance regex vous appelez.

résultat: vous pouvez avoir n'importe quelle chaîne alphanumérique sauf qu'il doit y avoir une lettre quelque part.

\p{L} est similaire à [A-Za-z] sauf qu'il comprendra toutes les lettres de tous les alphabets, avec ou sans accents et marques diacritiques. Il est beaucoup plus inclusif, en utilisant un plus grand ensemble de caractères Unicode. Si vous ne voulez pas de cette flexibilité, remplacez [A-Za-z] . Un semblable remarque s'applique à \p{N} qui pourrait être remplacé par [0-9] si vous voulez garder simple. Voir la page MSDN sur les classes de caractères pour plus de renseignements.

Le moins de fantaisie non-Unicode version serait

^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
4
répondu John Kugelman 2009-06-27 02:41:34
^\w*[\p{L}]\w*$

celui-ci n'est pas si dur. L'expression régulière se lit comme suit: faites correspondre une ligne commençant par n'importe quel nombre de caractères de mot (Lettres, Nombres, Ponctuation (que vous pourriez ne pas vouloir)), qui contient un caractère de lettre (qui est la partie [\p{L}] au milieu), suivi par n'importe quel nombre de caractères de mot à nouveau.

si vous voulez exclure la ponctuation, vous aurez besoin d'une expression plus forte:

^[\p{L}\p{N}]*[\p{L}][\p{L}\p{N}]*$

et si vous vous en fichez à propos D'Unicode vous pouvez utiliser une expression ennuyeuse:

^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
1
répondu Welbog 2009-06-27 02:37:07
^[0-9]*[A-Za-z][0-9A-Za-z]*$

est le regex qui fera ce que vous voulez. Les ^ et $ correspondent au début et à la fin du mot pour empêcher les autres caractères. Vous pouvez remplacer le bloc [0-9A-z] par \w, mais je préfère une forme plus verbeuse parce que c'est plus facile à étendre avec d'autres caractères si vous voulez.

Ajouter un validateur d'expression régulier à votre asp.net page selon le tutoriel sur MSDN: http://msdn.microsoft.com/en-us/library/ms998267.aspx .

1
répondu Dexter 2009-06-27 02:46:23
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$

peut être

  • tout nombre terminé par un caractère,
  • ou une expression alphanumérique commençant par un caractère
  • ou une expression alphanumérique commençant par un nombre, suivi d'un caractère et se terminant par une sous-expression alphanumérique
0
répondu eKek0 2009-06-27 02:52:08