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 № 1Il 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}$";