PHP用户名验证

时间:2010-12-08 03:24:24

标签: php

我正在编写PHP登录系统。我有我需要的所有工作,但我想验证在注册期间输入的用户名只包含字母数字字符。那么我怎么能得到一个变量,比如$ username,并确保它只包含字母数字字符?

6 个答案:

答案 0 :(得分:21)

if(preg_match('/^\w{5,}$/', $username)) { // \w equals "[0-9A-Za-z_]"
    // valid username, alphanumeric & longer than or equals 5 chars
}

OR

if(preg_match('/^[a-zA-Z0-9]{5,}$/', $username)) { // for english chars + numbers only
    // valid username, alphanumeric & longer than or equals 5 chars
}

答案 1 :(得分:6)

如果您不关心长度,可以使用:

if (ctype_alnum($username)) {
   // Username is valid
}

http://www.php.net/manual/en/function.ctype-alnum.php

答案 2 :(得分:5)

我推荐的最佳方式是: -

$str = "";
function validate_username($str) 
{
    $allowed = array(".", "-", "_"); // you can add here more value, you want to allow.
    if(ctype_alnum(str_replace($allowed, '', $str ))) {
        return $str;
    } else {
        $str = "Invalid Username";
        return $str;
    }
}

答案 3 :(得分:0)

试试这个

function filterName ($name, $filter = "[^a-zA-Z0-9\-\_\.]"){
    return preg_match("~" . $filter . "~iU", $name) ? false : true;
}

if ( !filterName ($name) ){
 print "Not a valid name";
}

答案 4 :(得分:0)

如果您允许使用基本的字母数字用户名,则可以使用这样的预定义模板来检查字母数字值:

preg_match([[:alnum:]],$username)&&!preg_match([[:space:]],$username)

如果字符串包含任何空格,则第二部分返回false。

答案 5 :(得分:0)

有点晚了,但是我正在使用以下功能来测试用户名或其他类型的类似字母数字的字符串。它仅在默认情况下测试字母数字字符,但您可以添加更多字符,例如。 (点),-(破折号)或_(下划线)。

对于指定为$more_chars的字符,它还将防止连续的字符。

function valid_alphanum_string($str, $more_chars = '') {
  # check type
  if (!is_string($str)) return false;

  # handle allowed chars
  if (mb_strlen($more_chars) > 0) {
    # don't allow ^, ] and \ in allowed chars
    $more_chars = str_replace(array('^', ']', '\\'), '', $more_chars);

    # escape dash
    $escaped_chars = strpos($more_chars, '-') !== false
      ? str_replace('-', '\-', $more_chars)
      : $more_chars;

    # allowed chars must be non-consecutive
    for ($i=0; $i < mb_strlen($more_chars); $i++) {
      $consecutive_test = preg_match('/[' . $more_chars[$i] . '][' . $escaped_chars . ']/', $str);
      if ($consecutive_test === 1) return false;
    }

    # allowed chars shouldn't be at the start and the end of the string
    if (strpos($more_chars, $str[0]) !== false) return false;
    if (strpos($more_chars, $str[mb_strlen($str) - 1])) return false;
  }
  else $escaped_chars = $more_chars;

  $result = preg_match('/^[a-zA-Z0-9' . $escaped_chars . ']{4,}$/', $str);

  return $result === 1 ? true : false;
}