将可能的字母与数字匹配

时间:2014-06-05 20:16:04

标签: php regex preg-match

一直在寻找答案而没有取得明显的成功。

我使用preg_match对QR12345678的过帐值进行了后期数据检查。 QR可能会提交,也可能不会提交。我已经使用了下面的各种preg_match而没有运气。

preg_match('/^[A-Z]{1,3}[0-9]{4,10}$/', $_POST['some_id'])
preg_match('/^[A-Z]{1,3}?[0-9]{4,10}$/', $_POST['some_id'])
preg_match('/([A-Z]{1,3})?[0-9]{4,10}$/', $_POST['some_id'])
preg_match('/^([A-Z]{1,3})?[0-9]{4,10}$/', $_POST['some_id'])
preg_match('/[A-Z]{0,3}[0-9]{4,10}/', $_POST['some_id'])
preg_match('/([A-Z]{1,3})*[0-9]{4,10}$/', $_POST['some_id'])

在以下内联条件中使用preg_match

 $some_id = isset($_POST['some_id']) 
        && preg_match('/[A-Z]{1,3}*[0-9]{4,10}/', $_POST['some_id'])
    ? $_POST['some_id']
    : 0;

因此,$some_id无论如何都会返回0

1 个答案:

答案 0 :(得分:1)

错误是您在代码中实际使用的模式:

> echo preg_match('/[A-Z]{1,3}*[0-9]{4,10}/',"QR12345678");
< PHP Warning:  preg_match(): Compilation failed: nothing to repeat at offset 10 in php shell code on line 1

不起作用的部分是{1,3}*,其中你有2个量词,而第二个(*)不知道要重复什么。删除冗余的*量词或使用其他建议的模式之一:

> echo preg_match('/[A-Z]{1,3}[0-9]{4,10}/',"QR12345678");
< 1
> echo preg_match('/^([A-Z]{1,3})?([0-9]{4,10})$/',"QR12345678");
< 1