preg_match()和用户名

时间:2010-07-31 21:13:04

标签: php regex preg-match

function isUserID($username) {
  if (preg_match('/^[a-z\d_]{2,20}$/i', $username)) {
    return true;
  } else {
    return false;
  }
}   

轻松一个..,我有这个,你能解释它检查的内容吗?我知道它会检查用户名是否有2到20之间的长度,还有什么?感谢

7 个答案:

答案 0 :(得分:29)

它搜索仅包含字母数字和下划线字符的文本,长度为2到20个字符。

/^[a-z\d_]{2,20}$/i
||||  | |||     |||
||||  | |||     ||i : case insensitive
||||  | |||     |/ : end of regex
||||  | |||     $ : end of text
||||  | ||{2,20} : repeated 2 to 20 times
||||  | |] : end character group
||||  | _ : underscore
||||  \d : any digit
|||a-z: 'a' through 'z'
||[ : start character group
|^ : beginning of text
/ : regex start

答案 1 :(得分:2)

/^[a-z\d_]{2,20}$/i

拼接起来:

/是正则表达式分隔符;你可以选择任何你喜欢的东西,但正斜杠是最常见的斜杠。

^表示'匹配输入的开头':以下表达式必须位于匹配正则表达式的开头。

[a-z\d_]是一个角色类;它的意思是“方括号之间的任何字符”;反斜杠与d结合使用是“数字”的快捷方式,短划线表示包含范围;因此,字符类说'任何字母或数字,或下划线'。

{2;20}是一个量词,表示前面的表达式(字符类)必须重复2到20次。

$表示“匹配输入结束”,类似于^。

另一个/终止正则表达式本身;以下是游行选项,在本例中为i,表示“不区分大小写”。

答案 2 :(得分:1)

检查用户名是否包含2到20个字母,这些字母是字母(由于i标志,大写或小写),数字或下划线。

这可以通过两种方式缩写:首先,if构造是不必要的。其次,您可以使用\w代替相同的字符,所以:

function isUserID($username) {
  return preg_match('/^\w{2,20}$/', $username);
}

答案 3 :(得分:0)

它还检查它是否包含除字母,a-z和A-Z,数字0-9和_之外的任何字符。

或者你可以说,检查它只包含字母数字字符和_。

这可以被重写为更简单 - preg_match返回一个int,所以没有理由使用'return false,return true'模式。

function isUserID($username){ return (bool)preg_match('/^[a-z\d_]{2,20}$/i', $username); }

会做同样的事情。

此外,\w表示与这些字符相同的内容。字母,数字和下划线。所以更好的是

function isUserID($username){ return (bool)preg_match('/^[\w]{2,20}$/i', $username); }

答案 4 :(得分:0)

它会逐字检查$username是否包含2到20个字符a - zA - Z的序列(因为< em> i 标记为不区分大小写),0 - 9(对于\d)和_

答案 5 :(得分:0)

检查一个2-20个字符长的不区分大小写的字母数字单词,由字母,数字和_

组成

答案 6 :(得分:-1)

请使用替换您的用户名验证码。

  if (preg_match('^[0-9A-Za-z_]+$^', $_POST['username']) == 0) {
        die ('Invalid username!');
    }