如何检查是否允许使用单个字符?

时间:2012-10-26 12:52:22

标签: php regex arrays preg-match pcre

我有一个包含5个单字符的数组。应使用此正则表达式检查它们:

$regex = "/[a-zA-Z0-9]/";

如何检查是否允许使用单个字符?

6 个答案:

答案 0 :(得分:4)

您也可以使用接受数组的preg_grep

$matchedArray = preg_grep("/[a-zA-Z0-9]/", $array);

根据文档:preg_grep返回由与给定模式匹配的输入数组元素组成的数组。

然后你可以这样做:

if ($array === $matchedArray)
    echo "matched\n";

答案 1 :(得分:1)

为什么不将它们检查为字符串?

if (preg_match('/^[a-z0-9]+$/i',implode('',$yourCharArray)))
{
    echo 'all chars are ok';
}

哦,如果您想知道/[a-z]/i/[a-zA-Z]/相同,i是不区分大小写的标记。

如果您仍然需要/需要单独检查每个元素,因为您的评论让我相信:

foreach($yourChars as $char)
{
    if (!preg_match('/[a-z0-9]/i',$char))
    {
        echo 'Error: '.$char.' is not allowed';
    }
}

但在这种情况下,我建议使用正则表达式。只是:

if (!ctype_alnum($char))

会这样做,它会更快,完全符合您的需要。 see the docs再次,内爆数组并检查结果字符串的长度仍然快得多:

$check = implode('',$charArr);
if (strlen($check) > 5 || !ctype_alnum($check))
{//more than 5 chars, other chars than a-z/0-9
    echo 'invalid input';
}
//if > 5 should be allowed, but the array elements should be single chars:
if (strlen($check) > count($charArr) || !ctype_alnum($check))

答案 2 :(得分:0)

如果它们匹配这个模式,你会迭代数组并逐个检查吗?

答案 3 :(得分:0)

您的正则表达式没有定义数量

您可以使用{}来执行此操作。以下正则表达式接受1到5个字符,这些字符由[]

指定

[a-zA-Z0-9]{1,5}

或者您可以将“+”用于“一个或多个”,或者使用逗号来指定固定数量的字符。

答案 4 :(得分:0)

首先,如果您需要检查输入以包含只是模式,则需要添加锚点:

^pattern$

其中^是字符串/行的开头,$是其结尾。

关于模式,请使用这些>>

单个字符:

[a-zA-Z0-9]

无或一个字符:

[a-zA-Z0-9]?

一个或多个角色:

[a-zA-Z0-9]+

没有或多个字符:

[a-zA-Z0-9]*

确切的字符数(n):

[a-zA-Z0-9]{n}

范围内的字符数(n,m):

[a-zA-Z0-9]{n,m}

n个或多个字符:

[a-zA-Z0-9](n,}

不超过n个字符:

[a-zA-Z0-9]{0,n}

答案 5 :(得分:0)

我不确定我理解你的问题,但你可以循环播放数组吗?

$myArray = ('0', 'a', 'b', 'c', 'L');
$validArray = true;
foreach ($myArray as $value) {
    if (preg_match("/[a-zA-Z0-9]/", $value) == 0)
            $validArray = false;
}

这将验证整个数组,您可以将其包装到函数中。但就像我说的那样,我不确定你需要什么。

作为旁注,您可以创建一个函数:

function validateArray($arr) {
    $validArray = true;
    foreach ($arr as $value) {
        if (preg_match("/[a-zA-Z0-9]/", $value) == 0)
                $validArray = false;
    }
    return $validArray;
}

$myArray = ('0', 'a', 'b', 'c', 'L');
$myArrayValid = validateArray($myArray);