27 votes

Regex qui correspondra à 6 caractères qui n'autorise que les chiffres, les espaces de début et de fin

La regex que je suis en train de mettre en œuvre doivent correspondre les données suivantes:

  1. 123456
  2. 12345 
  3.  23456
  4.      5
  5. 1     
  6.       
  7.   2   
  8.  2345 

Il ne doit pas correspondre à la suivante:

  1. 12 456
  2. 1234 6
  3.  1 6
  4. 1 6

Il devrait être de 6 caractères au total, y compris les chiffres, la direction, et les espaces de fin. Il pourrait également être de 6 caractères de juste des espaces. Si les chiffres sont utilisés, il devrait y avoir aucun espace entre eux.

J'ai essayé les expressions suivantes en vain:

^\s*[0-9]{6}$
\s*[0-9]\s*

30voto

Wiktor Stribiżew Points 100073

Vous pouvez simplement utiliser un *\d* * avec un motif restrictive (?=.{6}$) anticipation:

^(?=.{6}$) *\d* *$

Voir la regex démo

Explication:

  • ^ - début de la chaîne
  • (?=.{6}$) - la chaîne ne doit avoir que 6 tout caractère autre qu'un retour à la ligne
  • * - 0+ des espaces ordinaires (NOTE pour correspondre à l'espace horizontal - utiliser [^\S\r\n])
  • \d* - 0+ chiffres
  • * - 0+ des espaces réguliers
  • $ - fin de la chaîne.

Java démo (les 4 dernières sont les cas de test qui doit échouer):

List<String> strs = Arrays.asList("123456", "12345 ", " 23456", "     5", // good
"1     ", "      ", "  2   ", " 2345 ",  // good
"12 456", "1234 6", " 1   6", "1    6"); // bad
for (String str : strs)
    System.out.println(str.matches("(?=.{6}$) *\\d* *"));

Notez que lorsqu'il est utilisé en String#matches(), vous n'avez pas besoin de la intial ^ et définitive $ ancres comme la méthode nécessite une chaîne complète de match par l'ancrage du modèle par défaut.

4voto

heemayl Points 8100

Vous pouvez également faire:

 ^(?!.*?\d +\d)[ \d]{6}$
 
  • L'anticipation négative de largeur nulle (?!.*?\d +\d) garantit que les lignes comportant des espaces entre les chiffres ne sont pas sélectionnées.

  • [ \d]{6} correspond aux lignes souhaitées qui ont six caractères ayant juste un espace et / ou des chiffres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X