PHP: проверить строку, содержащую числа, разделенные дефисом (возможно с помощью preg_match)? - PullRequest
1 голос
/ 18 января 2012

Я пытаюсь проверить строку, которая содержит числа, где каждые четыре числа разделены дефисом, например 1111-2222-3333-4444

Я пытаюсь выполнить какую-то проверку, чтобы гарантировать использование этого формата (16 цифр, три дефиса и ничего больше). У меня есть preg_match, где он проверяет только цифры, но мне нужно принять дефис и этот формат.

preg_match('/^[0-9]{1,}$/', $validatenumbers)

Я пытался сделать это с помощью регулярных выражений, но, к сожалению, это не самая сильная сторона, поэтому я не смог правильно проверить цифры.

Важно, чтобы он был на PHP, а не на Javascript, потому что он способен «отключать» JavaScript в браузере.

Ответы [ 5 ]

4 голосов
/ 18 января 2012
preg_match("/^([0-9]{4}-){3}[0-9]{4}$/", $input);

([0-9]{4}-){3} Соответствует точно 3 группам из 4 цифр, за которыми следует дефис Это заканчивается другой группой [0-9]{4} (4 цифры без дефиса).

1 голос
/ 18 января 2012

Это похоже на номер кредитной карты. Если это так, вы должны использовать Luhn checksum вместо простого регулярного выражения.

1 голос
/ 18 января 2012
preg_match('/^[0-9]{4}\-[0-9]{4}\-[0-9]{4}\-[0-9]{4}$/',$numbers);

Я думаю, это должно сработать.

0 голосов
/ 18 января 2012

Если вам требуется точно соответствовать этому формату, шаблон будет '~^\d{4}-\d{4}-\d{4}-\d{4}$~', или вы можете написать его более широко: '^(\d+-)*\d+$' (это будет соответствовать 11, 11-11111 ... и т. Д.),

0 голосов
/ 18 января 2012

попробовать:

if(preg_match('#^\d{4}-\d{4}-\d{4}-\d{4}$#',$string){}
...