Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么赢了';这个功能不起作用吗?Strlen,循环数组_Php_Arrays_Strlen - Fatal编程技术网

Php 为什么赢了';这个功能不起作用吗?Strlen,循环数组

Php 为什么赢了';这个功能不起作用吗?Strlen,循环数组,php,arrays,strlen,Php,Arrays,Strlen,此函数通过在字符数组中循环并检查是否有任何字符与允许的字符列表不匹配来检查特殊字符。这个函数有什么问题?如果你能帮忙,非常感谢 假设str_split_数组($stringPassed);工作完美(正如我99%肯定的那样,我在其他各种函数中使用它) //如果字符串具有特殊字符,则返回true //$stringPassed=要拆分和检查的输入字符串 //$checkWhiteSpace=检查空白,true或false 函数具有特殊字符($stringPassed,$checkWhiteSpace

此函数通过在字符数组中循环并检查是否有任何字符与允许的字符列表不匹配来检查特殊字符。这个函数有什么问题?如果你能帮忙,非常感谢

假设str_split_数组($stringPassed);工作完美(正如我99%肯定的那样,我在其他各种函数中使用它)

//如果字符串具有特殊字符,则返回true
//$stringPassed=要拆分和检查的输入字符串
//$checkWhiteSpace=检查空白,true或false
函数具有特殊字符($stringPassed,$checkWhiteSpace=true){
//允许的字符数组
$allowedCharacters=数组(“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”、“k”、“l”、“m”、“n”、“o”、“p”、“q”、“r”、“s”、“t”、“u”、“v”、“w”、“x”、“y”、“z”、1、2、3、4、5、6、7、8、9、0);
$arrayLen=strlen($stringPassed);
$array=str\u split\u数组($stringPassed);

对于($i=0;$i而言,更好的解决方案是正则表达式

return(bool)preg_match(“/[^0-9a-z.”($allowWhiteSpace?”:“)。]/i“,$stringPassed”);

i
使其不区分大小写

更多关于


我还将
$checkWhiteSpace
更改为
$allowWhiteSpace
,以消除歧义。

放弃该函数,改用preg\u match,效率更高

function hasSpecialCharacters($stringPassed, $checkWhiteSpace = true)
{
    if($checkWhiteSpace)
    {
        $regex = "/^[a-z0-9 ]+$/" 
    }
    else
    {
        $regex = "/^[a-z0-9]+$/"
    }
    if(preg_match($regex, $stringPassed)
    {
        return true;
    }
    return false;
}

这里有一个您应该熟悉的方法。

您可以轻松地根据正则表达式验证传递的$stringPassed以实现相同的效果?
strlen
不计算字符数,而是计算字节数。因此,如果您的字符串是unicode格式,它不会给出精确的值。顺便问一下,请检查
$arrayLen
-1的值是多少?您的问题是什么结果是什么?为什么它与您想要的不同?如果我们是读心术的人,这只是一个真正的问题。这可以用一行来概括:
return(bool)preg_match(“/[^a-z0-9.”(($checkWhiteSpace)?“:”)]/,$stringPassed)
有一个内置函数来替换手写的
str_split_数组
——它被称为
str_split
。但这不是必需的,字符串也可以通过索引访问(例如:
$stringPassed[$i]
。但是,正如其他人所指出的,您可能无论如何都应该使用正则表达式。如果您要这样做,您最好只执行
“/[\W_389;”。($checkWhiteSpace?“”)。]/'
为了模拟OP的函数,您应该使用类似于
return(bool)的强制转换返回布尔值preg_match…
接受您的建议,谢谢。不过,
\W
只差5个字符,
1
0
将返回
True
False
(但对于
=
)我知道,我只是有点迂腐。+1顺便说一句。编辑实际上我刚刚意识到,
\W
将不起作用,因为它将匹配一个空格。你原来的正则表达式更好。对不起。谢谢你:D(我有时也迂腐)编辑我将反转
\W
function hasSpecialCharacters($stringPassed, $checkWhiteSpace = true)
{
    if($checkWhiteSpace)
    {
        $regex = "/^[a-z0-9 ]+$/" 
    }
    else
    {
        $regex = "/^[a-z0-9]+$/"
    }
    if(preg_match($regex, $stringPassed)
    {
        return true;
    }
    return false;
}