/ / Java Regex - Ce n'est pas une chaîne vide, seulement des nombres, une longueur de 8 caractères [fermée] - java, regex

Java Regex - Pas une chaîne vide, seulement des nombres, 8 caractères de long [fermé] - Java, regex

J'essaie de construire une regex qui n'autorise en principe que des nombres, ne pouvant être vide, c'est-à-dire "" ou ayant 8 espaces vides

J'ai pu obtenir deux expressions rationnelles distinctes qui feraient presque ce que je suis après: ^ (?! s * $). + ce qui n'autorise pas les chaînes vides, mais autorise les espaces blancs. Également: ^ [0-9] + $ ce qui me permet de rechercher uniquement des nombres.

Je voudrais combiner ces expressions regex et aussi et dans une clause pour faire correspondre des chaînes de 8 caractères.

Un conseil sur la façon dont je pourrais combiner ce que j'ai jusqu'à présent?

Réponses:

6 pour la réponse № 1

Il suffit de placer ^(?!s*$) au début de votre regex. Essayez de cette façon ^(?!s*$)[0-9s]{8}$?

  • ^(?!s*$) comme vous le savez va vérifier si la chaîne entière n'est pas seulement des espaces blancs
  • [0-9s] correspondra à n'importe quel chiffre et espace blanc
  • {8} signifie exactement 8 occurrences d'élément le précédant (dans notre cas, chiffre ou espace blanc)

2 pour la réponse № 2

Vous ne pouvez pas vraiment comprendre comment la chaîne peut comporter 8 caractères, ne contenir que des chiffres et être un espace, mais pour faire correspondre seulement 8 chiffres, essayez celui-ci:

^d{8}$

1 pour la réponse № 3

Vous pouvez spécifier un quantificateur garantissant que votre modèle correspondra à un certain nombre de chiffres, comme ceci: ^[0-9]{8}$.

Modifier: Hm, j'ai mal interprété la partie sur l'espace blanc avant. Est-il acceptable qu'il y ait un espace blanc dans la chaîne ou juste autour? Si le premier, je vais devoir travailler ma réponse. Si le dernier, lâchez le ^ et $.

Modifier la v2: Pshemo a la journée.


0 pour la réponse № 4

Commencez par vérifier la longueur de la chaîne pour voir si elle est longue;)

Puis coupez (pour supprimer les espaces au début et à la fin) et faites correspondre avec d+(s+d+)*:

// No need to anchor the regex since we use .matches()
return input.length() == 8 && input.trim().matches("\d+(\s+\d+)*");

0 pour la réponse № 5

^ [d | s] {8} $

ou en java ...

String re = "^[\d|\s]{8}$";