PHP:验证包含数字的字符串,用连字符分隔(可能是preg_match)?

时间:2012-01-18 17:59:23

标签: php regex validation preg-match

我正在尝试验证一个包含数字的字符串,其中每四个数字用连字符分隔,例如1111-2222-3333-4444

我正在尝试进行某种验证,所以我可以保证使用这种格式(有16位数,三个连字符,没有别的)。我有这个preg_match,它只检查数字,但我需要接受连字符和这种格式。

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

我试过用正则表达式来做但不幸的是它不是我最强的一面,所以我无法正确验证这些数字。

重要的是,它是在PHP而不是Javascript,因为能够在浏览器中“关闭”javascript。

5 个答案:

答案 0 :(得分:4)

preg_match("/^([0-9]{4}-){3}[0-9]{4}$/", $input);

([0-9]{4}-){3}正好匹配3组4位数后跟连字符。这是由另一个组[0-9]{4}终止的(4个数字没有连字符)。

答案 1 :(得分:1)

preg_match('/^[0-9]{4}\-[0-9]{4}\-[0-9]{4}\-[0-9]{4}$/',$numbers);

我认为这应该有用。

答案 2 :(得分:1)

这看起来像一张信用卡号码。如果是这种情况,您应该使用Luhn checksum而不是简单的正则表达式。

答案 3 :(得分:0)

尝试:

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

答案 4 :(得分:0)

如果您需要匹配该确切格式,则模式为'~^\d{4}-\d{4}-\d{4}-\d{4}$~',或者您可以更一般地编写它:'^(\d+-)*\d+$'(这将匹配11,11-11111 ......等等) ,