3
votes

Expression régulière limite la longueur du caractère sans correspondre au dernier caractère de la chaîne

Je travaille sur une nouvelle expression régulière pour préparer un nom d'hôte sur une machine virtuelle, cependant, je rencontre un problème sur la façon de limiter la longueur de caractère de 24 tout en m'assurant que le dernier caractère n'est pas un point ou un moins. (le premier caractère doit être un caractère alpha)

Je suis allé jusqu'à m'assurer que le premier caractère est un alpha. Le deuxième groupe de caractères a une longueur de 23 avec [a-zA-z0-9] comprenant le point et le moins. J'ai essayé le look-behind négatif . + (? en plus mais ne fonctionne pas.

^[a-zA-Z .([a-zA-Z0-9-.ITED{0,23}

Je m'attends à ce que la sortie de a123456789012345678911234 soit déjà correcte. Je suppose que cette sortie devrait être incorrecte a12345678901234567891123-


3 commentaires

^ [a-zA-Z] (?: [a-zA-Z0-9 -.] {0,22} [a-zA-Z0-9])? $ ?


pourquoi ^ a [a-zA-Z0-9] {23} ne fonctionne pas? Si vous ne voulez pas correspondre à "." ou "-" alors ne les incluez pas dans l'expression.


@Ghoti merci pour le commentaire. "." ou les caractères "-" sont acceptables tant que ce n'est pas le dernier caractère de la chaîne.


3 Réponses :


1
votes

Vous pouvez utiliser

^[a-zA-Z](?:[a-zA-Z0-9.-]{0,22}[a-zA-Z0-9])?$

Voir la démo regex a > et les graphe regex :

 entrez la description de l'image ici

  • ^ - début de chaîne
  • [a-zA-Z] - une lettre
  • (?: [a-zA-Z0-9 .-] {0,22} [a-zA-Z0-9])? - une séquence facultative de:
    • [a-zA-Z0-9 .-] {0,22} - 0 à 22 lettres, chiffres, . ou - code > caractères
    • [a-zA-Z0-9] - une lettre ou un chiffre
  • $ - fin de chaîne.


0 commentaires

1
votes

Et un lookahead fonctionne-t-il?

^(?![\d.-])[a-zA-Z\d.-]{0,23}[a-zA-Z\d]$
Voir la démo sur regex101
  • ^ (?! [\ d.-]) vérifie au début si le caractère suivant n'est pas un chiffre, un tiret ou un point
  • à la fin $ , l'un des [a-zA-Z \ d] est requis avec un maximum de 23 [a-zA-Z \ d. -] entre


0 commentaires

0
votes

Afin de limiter le nombre de caractères, l'expression doit être placée entre ^ et $ indiquant le début et la fin.

     ^[a-zA-Z][a-zA-Z0-9.-]{0,22}[a-zA-Z0-9]$

[] définit un caractère parmi ceux entre parenthèses {a, b} définit le nombre d'occurrences du caractère précédent de 0 à 22 dans l'exemple une limite totale de 2 à 24 caractères

Ceci peut être enregistré plus court mais de cette façon c'est le plus simple à comprendre.


0 commentaires