-5

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

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

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

4

6 回答 6

4

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

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

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

然后你可以这样做:

if ($array === $matchedArray)
    echo "matched\n";
于 2012-10-26T12:55:11.613 回答
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))

会做,它更快,并且完全符合您的需要。请参阅文档
再次,内爆数组并检查结果字符串的长度仍然要快得多:

$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))
于 2012-10-26T12:58:24.087 回答
0

您遍历数组并一一检查它们是否与此模式匹配?

于 2012-10-26T12:54:16.300 回答
0

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

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

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

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

于 2012-10-26T12:55:37.947 回答
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}
于 2012-10-26T12:59:57.460 回答
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);
于 2012-10-26T13:03:45.163 回答