2010-08-06 7 views

Répondre

5

Si par null vous dire la chaîne vide, vous voulez:

^(?:[0-9]{5}|[0-9]{10}|)$ 
4
[0-9]{5}|[0-9]{10}|null 

devrait le faire. Selon la façon dont vous utilisez l'expression rationnelle, vous devrez peut-être pour l'ancrer afin d'être sûr qu'il correspond toujours à la chaîne entièreet non pas seulement une sous-chaîne à cinq chiffres dans une chaîne de huit chiffres:

^(?:[0-9]{5}|[0-9]{10}|null)$ 

^ et $ ancre la regex, (?:...) est un groupe non-capture qui contient l'alternance.

Edit: Si vous voulez dire null == "chaîne vide", puis utilisez

^(?:[0-9]{5}|[0-9]{10}|)$ 
11

Ajoutez juste |null:

[0-9]{5}|[0-9]{10}|null 

Comme vous le savez sans doute, | est le "ou" opérateur, et la chaîne de caractères null correspond au mot null. Ainsi, il peut être lu comme <your previous pattern> or null.


Si vous voulez que le motif corresponde à la chaîne nulle, la réponse est que c'est impossible. Autrement dit, vous ne pouvez pas, par exemple, Matcher.matches() renvoyer true pour une chaîne d'entrée nulle. Si c'est ce que vous cherchez, vous pouvez obtenir en utilisant l'expression ci-dessus et correspondant pas sur str mais sur ""+str qui se traduirait par "null" si str est égal à null.

Questions connexes