Почему эта функция не работает? Strlen, массив для зацикливания
Эта функция проверяет наличие специальных символов, просматривая массив символов и проверяя, не совпадает ли какой-либо из них со списком разрешенных символов. Что не так с этой функцией? Если вы можете помочь, большое спасибо!
Предположим, что str_split_array($stringPassed); работает отлично (так как я уверен на 99%, я использую его в различных других функциях)
// returns true if a string has special characters
// $stringPassed = input string to split and check
// $checkWhiteSpace = check for whitespace, true or false
function hasSpecialCharacters($stringPassed, $checkWhiteSpace = true) {
// Array of characters ALLOWED
$allowedCharacters = array("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_split_array($stringPassed);
for($i=0;$i<$arrayLen;$i++) {
if(!in_array($array[$i], $allowedCharacters)) {
return true;
} else if($checkWhiteSpace==true && $array[$i]==" ") {
return true;
}
}
return false;
}
Еще раз спасибо!
2 ответа
Лучшее решение - Regex.
return (bool) preg_match("/[^0-9a-z".($allowWhiteSpace ? " ":"")."]/i", $stringPassed);
i
делает это без учета регистра.
Больше на Regex.
Я тоже поменял $checkWhiteSpace
в $allowWhiteSpace
устранить двусмысленность.
Отбросьте эту функцию и используйте вместо нее preg_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;
}
Вот таблица с регулярными выражениями, с которой вы должны ознакомиться.