Это может произойти из-за того, что вы не включили \A
во второй вариант.
&
или +
или любой другой символ в этом отношении будет совпадать в начале вашей строки - если оставшаяся часть регулярного выражения соответствует ((\d{1,4}-\d{1,4}-\d{3,4}))\z
Давайте предположим, что разделитель не существует, и давайте просто рассмотрим второй вариант:
((\d{1,4}-\d{1,4}-\d{3,4}))\z
Вы не утверждаете никаких требований начала строки (обратите внимание: \A
не существует в этой альтернативе - также как \z
не существует в вашей первой альтернативе.)
Итак, попробуйте любой из них, он должен работать для вас.
/\A0(\d{4,14})\z|\A0((\d{1,4}-\d{1,4}-\d{3,4}))\z/
или
/\A0(?:(\d{4,14})|((\d{1,4}-\d{1,4}-\d{3,4})))\z/
Онлайн отладчик регулярных выражений может помочь вам отладить ваш шаблон. Взгляните на две альтернативы здесь:
Обратите внимание, что синий (красиво нарисованный) круг не показывает ваш \z
, а также красный круг не показывает \A0
?
И слегка укороченный / оптимизированный шаблон:
/\A0(?:\d{4,14}|(?:\d{1,4}-){2}\d{3,4})\z/
Я немного запутался, почему у вас есть две группы захвата, которые захватывают одну и ту же строку. ((\d{1,4}-\d{1,4}-\d{3,4}))
. Вам, вероятно, следует отбросить один из них, так как он кажется излишним.