[0-9]{5}|[0-9]{10}|null
должен это сделать. В зависимости от того, как вы используете регулярное выражение, вам может понадобиться привязать его, чтобы быть уверенным, что оно всегда будет соответствовать всей строке , а не только пятизначной подстроке внутри восьмизначной строки: 1004 *
^(?:[0-9]{5}|[0-9]{10}|null)$
^
и $
привязывают регулярное выражение, (?:...)
- это группа без захвата, содержащая чередование.
Редактировать: если вы имеете в виду null
== "пустая строка", тогда используйте
^(?:[0-9]{5}|[0-9]{10}|)$