使用ctype_alnum()时,如何将_
和-
的例外添加为有效字符?
if ( ctype_alnum ($username) ) {
return TRUE;
} elseif (!ctype_alnum ($username)) {
$this->form_validation->set_message(
'_check_username',
'Invalid username! Alphanumerics only.'
);
return FALSE;
}
答案 0 :(得分:18)
由于ctype_alnum仅验证字母数字字符, 试试这个:
$sUser = 'my_username01';
$aValid = array('-', '_');
if(!ctype_alnum(str_replace($aValid, '', $sUser))) {
echo 'Your username is not properly formatted.';
}
答案 1 :(得分:5)
使用preg_match
代替,也许?
if(preg_match("/^[a-zA-Z0-9_\-]+$/", $username)) {
return true;
} else {
$this->form_validation->set_message('_check_username', 'Invalid username! Alphanumerics only.');
}
答案 2 :(得分:2)
以下是如何使用ctype_alnum并且有异常,在这种情况下我也允许使用连字符(OR语句)。
$oldString = $input_code;
$newString = '';
$strLen = mb_strlen($oldString);
for ($x = 0; $x < $strLen; $x++)
{
$singleChar = mb_substr($oldString, $x, 1);
if (ctype_alnum($singleChar) OR ($singleChar == '-'))
{
$newString = $newString . $singleChar;
}
}
$input_code = strtoupper($newString);
答案 3 :(得分:0)
regex等效项非常简短且易于阅读。
~^[\w-]+$~
这种模式要求整个字符串由一个或多个字母,数字,下划线或连字符组成。
Regex允许您跳过数据准备步骤,直接访问评估-生成更清晰,更精简,更直接,更专业的代码。
if (preg_match('~^[\w-]+$~', $username)) {
return true;
} else {
$this->form_validation->set_message(
'_check_username',
'Invalid username! Alphanumerics, underscores, and hyphens only.'
);
return false;
}