Подтвердить что ты не робот

Повторное выражение SSN для 123-45-6789 ИЛИ XXX-XX-XXXX

Может ли кто-нибудь предоставить мне регулярное выражение для SSN, которое соответствует либо

123-45-6789

ИЛИ

ХХХ-ХХ-ХХХХ

В настоящее время у меня есть ^\d{3}-?\d{2}-?\d{4}$, который соответствует первому выражению, но мне нужно добавить в него второе выражение в качестве альтернативы.

Спасибо!

4b9b3361

Ответ 1

(^\d{3}-?\d{2}-?\d{4}$|^XXX-XX-XXXX$) должен это сделать.

---- EDIT ----

Как указывает Джоэл, вы также можете сделать ^(\d{3}-?\d{2}-?\d{4}|XXX-XX-XXXX)$, который немного опрятен.

Ответ 2

В строго ответьте на вопрос:

^(123-45-6789|XXX-XX-XXXX)$

shoud работа.; -)

Если вы читаете раздел Valid SSNs в статье SSN Википедии, тогда становится ясно, что регулярное выражение для проверки SSN немного более сложным.

Соответственно, немного более точное чистое регулярное выражение SSN будет выглядеть так:

^(?!(000|666|9))\d{3}-(?!00)\d{2}-(?!0000)\d{4}$

Ответ 3

Итак, у вас есть: ^\d{3}-?\d{2}-?\d{4}$

Что вам нужно, так это разрешить любой из этих числовых блоков вместо "X". Это также довольно просто, как регулярное выражение - просто приспособите свой существующий к X вместо \d в каждом из трех мест: X{3}-?X{2}-?X{4}

Вы не хотите комбинировать числовой код с кодом X, поэтому вам просто нужно разрешить либо один случай, либо другой, поэтому завершите их в скобках, а нам будет символ канала, чтобы указать тот или иной, так:

^((\d{3}-?\d{2}-?\d{4})|(X{3}-?X{2}-?X{4}))$

Вероятно, вы также захотите разрешить использование верхнего или нижнего регистра X. Это можно указать с помощью [Xx] или, если вы делаете все это без учета регистра, используя модификатор i вне регулярного выражения.

Ответ 4

Тогда это может быть

/^[\dX]{3}-?[\dX]{2}-?[\dX]{4}$/

если вы хотите, чтобы x тоже был действительным, вы можете добавить модификатор i в конец:

/^[\dX]{3}-?[\dX]{2}-?[\dX]{4}$/i

С другой стороны, регулярное выражение выше примет

123-xx-xxxx

так что в зависимости от того, хотите ли вы принять эту форму или нет, вы можете используйте свою оригинальную форму "или" другую форму:

/^(\d{3}-?\d{2}-?\d{4})|(xxx-xx-xxxx)$/i

Ответ 5

Более общее совпадение было бы следующим:

(^[^-]{3}-?[^-]{3}-?[^-]{4}$)

Это будет соответствовать любой последовательности символов, отличных от "-" в конфигурации 3-3-4 char. Например:

my @str = qw/
  1adfasdfa
  adsfaouaosd90890
  111-232-adafd
  xXX-232-1234
  111-222-4444
  $$%-AF#[email protected]
/;

foreach(@str)
{
  print "$_\n" if /^[^-]{3}-?[^-]{3}-?[^-]{4}$/;
}

Ответ 6

^\d{3}-?\d{2}-?\d{4}$|^XXX-XX-XXXX$