Регулярное выражение, чтобы разрешить диапазон чисел, или нуль - PullRequest
7 голосов
/ 06 августа 2010

У меня есть следующее регулярное выражение, как я могу изменить его, чтобы также разрешить нулевое значение?

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

Я бы хотел, чтобы 5-значное число, 10-значное число или ноль

Спасибо

Ответы [ 3 ]

12 голосов
/ 06 августа 2010

Просто добавить |null:

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

Как вы, наверное, знаете, | - это оператор "или", а строка символов null соответствует слову null. Таким образом это может быть прочитано как <your previous pattern> or null.


Если вы хотите, чтобы шаблон соответствовал нулевой строке, ответ таков: это невозможно. То есть вы не можете заставить, например, Matcher.matches() возвращать true для пустой входной строки. Если это то, что вам нужно, вы могли бы избежать использования , используя приведенное выше регулярное выражение и сопоставляя его не с str, а с ""+str, что привело бы к "null", если str на самом деле равно null.

6 голосов
/ 06 августа 2010

Если под нулем вы подразумеваете пустую строку, вы хотите:

^(?:[0-9]{5}|[0-9]{10}|)$
5 голосов
/ 06 августа 2010
[0-9]{5}|[0-9]{10}|null

должен это сделать. В зависимости от того, как вы используете регулярное выражение, вам может понадобиться привязать его, чтобы быть уверенным, что оно всегда будет соответствовать всей строке , а не только пятизначной подстроке внутри восьмизначной строки: 1004 *

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

^ и $ привязывают регулярное выражение, (?:...) - это группа без захвата, содержащая чередование.

Редактировать: если вы имеете в виду null == "пустая строка", тогда используйте

^(?:[0-9]{5}|[0-9]{10}|)$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...