如何使用ctype_alnum()允许下划线和短划线?

时间:2011-08-26 00:54:47

标签: php regex

使用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;
}

4 个答案:

答案 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;
}