我有一个包含5个单字符的数组。应使用此正则表达式检查它们:
$regex = "/[a-zA-Z0-9]/";
如何检查是否允许使用单个字符?
答案 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);