我有一个包含 5 个单个字符的数组。应使用此正则表达式检查它们:
$regex = "/[a-zA-Z0-9]/";
如何检查是否允许使用单个字符?
我有一个包含 5 个单个字符的数组。应使用此正则表达式检查它们:
$regex = "/[a-zA-Z0-9]/";
如何检查是否允许使用单个字符?
为什么不将它们作为字符串进行检查?
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))
您遍历数组并一一检查它们是否与此模式匹配?
您的正则表达式没有定义数量
您可以使用 {} 来执行此操作。以下正则表达式接受 1 到 5 个字符,这些字符由 [] 指定
[a-zA-Z0-9]{1,5}
或者您可以使用“+”表示“一个或多个”,或者不使用逗号来表示固定数量的字符。
首先,如果您需要检查输入是否仅包含模式,则需要添加锚点:
^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}
不确定我是否理解你的问题,但你可以循环数组吗?
$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);