2012-05-23 3 views
1

Я создал следующее регулярное выражение, которое соответствует либо 9 последовательным номерам, либо 14 последовательным номерам.Regex: Match on No Value

^[0-9]{14}$|^[0-9]{9}$ 

Как сделать это регулярное выражение совпадением 9 последовательных чисел или 14 последовательных чисел или нулевых значений?

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

+0

Что вы считаете нулевым значением? Строка длины 0, строка белых пробелов, строка '" null "'? – skarmats

+0

Строка длиной 0 –

ответ

1

Как насчет:

if (value.length && !value.match(/^(?:[0-9]{14}|[0-9]{9})$/) { 
    alert('invalid value'); 
} 

Если строка пуста, она будет проходить; если он не пуст, он должен соответствовать регулярному выражению.

Regex единственное решение:

if (!value.match(/^(?:[0-9]{14}|[0-9]{9})?$/) { 
    alert('invalid value'); 
} 
+0

Я хотел сохранить это чисто в регулярном выражении. –

+0

@ kmb385 обновил ответ –

+0

Отлично! Спасибо за обновление. Один последующий, нужно ли использовать?: Часть для группировки жетонов? Просто прошу о моем понимании. –

1

Просто добавьте другую альтернативу.

^[0-9]{14}$|^[0-9]{9}$|^$ 

Вы можете реорганизовать его на факультативный 9, за которым следуют дополнительные 5 цифр.

^([0-9]{9}([0-9]{5})?)?$ 

Если вам не нужно захватывать группы, не являющиеся захватывая группы с (?:...) будет немного быстрее, но в этом контексте, разница незначительна.