preg_match()要求参数为给定的长字符串


preg_match() expects parameter to be long string given

我正在检查信用卡字段,以确保每个字段包含四位数字。

function creditcard ($creditCard1,$creditCard2,$creditCard3,$creditCard4)
{
    $regexp="/^[0-9]{4}$/";
    if (preg_match($regexp,$creditCard1,$creditCard2,$creditCard3,$creditCard4))//line 18
    {
        return TRUE;
    }
    else
    {
        echo'<script type="text/javascript">alert("Enter a valid credit card number.")</script>';
        return FALSE;
    }
}
    $creditCard1=$_POST['creditCard1'];
    $creditCard2=$_POST['creditCard2'];
    $creditCard3=$_POST['creditCard3'];
    $creditCard4=$_POST['creditCard4'];
    $creditcard=creditcard($creditCard1,$creditCard2,$creditCard3,$creditCard4);

我收到这个错误。

Warning: preg_match() expects parameter 4 to be long, string given in C:'xampp'htdocs'SFASC2'aa.php on line 18

我不知道我做错了什么,谢谢。像这样的问题有很多,但没有一个能给我答案。。我的头一直撞在墙上,毫无疑问,我忽略了显而易见的事情。

preg_match一次只检查一个受试者。

尝试以下代码:

function creditcard($nums)
{
    $regexp="/^[0-9]{4}$/";
    for ($i = 0; $i < 4; $i++)
        if (! preg_match($regexp, $nums[$i]))
            return FALSE;
    return TRUE;
}
$creditCard1 = $_POST['creditCard1'];
$creditCard2 = $_POST['creditCard2'];
$creditCard3 = $_POST['creditCard3'];
$creditCard4 = $_POST['creditCard4'];
$ok = creditcard([$creditCard1, $creditCard2, $creditCard3, $creditCard4]);
if (! $ok)
    echo '<script type="text/javascript">alert("Enter a valid credit card number.")</script>';

对于此用例,最好使用preg_grep而不是preg_match,因为您要对一组输入应用单个正则表达式。使用preg_grep的主要好处是可以避免循环输入。考虑以下代码:

function creditcard($arr) {
    static $re="/^'d{4}$/";
    return (preg_grep($re, $arr) === $nums);
}
$result = creditcard(['5423', '1234', '1234', '1234']);
// returns true
$result = creditcard(['5423', 'A234', '1234', '1234']);
// returns false

PS:我将$re声明为static,因为该变量应该声明&仅初始化一次