regex preg_match()和用户名

svmlkihl  于 2022-11-26  发布在  其他
关注(0)|答案(7)|浏览(193)
function isUserID($username) {
  if (preg_match('/^[a-z\d_]{2,20}$/i', $username)) {
    return true;
  } else {
    return false;
  }
}

简单的一个...,我有这个,你能解释一下它检查什么吗?我知道它检查用户名是否有2-20之间的长度,还有什么?谢谢

zlhcx6iw

zlhcx6iw1#

它会搜寻仅包含英数字元和底缐字符的文字,长度为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
j9per5c4

j9per5c42#

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

拼接:
/是正则表达式定界符;你可以选择任何你喜欢的,但正斜杠是最常见的。
^表示“匹配输入的开头”:以下表达式必须位于正则表达式的开头才能匹配。
[a-z\d_]是字符类;它表示"方括号之间的任何字符“;反斜杠与d的组合是“digits”的快捷方式,破折号表示包含范围;因此,字符类表示“任何字母或数字,或下划线”。
{2;20}是一个量词,表示前面的表达式(字符类)必须重复2到20次。
$表示“匹配输入结尾”,类似于^。
另一个/终止了正则表达式本身;下面是处理选项,在本例中为i,表示“不区分大小写”。

f0ofjuux

f0ofjuux3#

它检查用户名是否由2到20个字母(大写或小写,取决于i标志)、数字或下划线组成。
这可以用两种方式缩写:首先,if结构是不必要的。其次,您可以使用\w作为这些相同字符的替代,因此:

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

at0kjp5o4#

它从字面上检查$username是否由a-zA-Z(因为 i 标志不区分大小写)、0-9(对于\d)和_的2到20个字符组成。

kqlmhetl

kqlmhetl5#

它还检查它是否包含除字母表、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); }
hpxqektj

hpxqektj6#

它正在检查由字母、数字和_组成的长度为2-20个字符且不区分大小写的字母数字词

f45qwnt8

f45qwnt87#

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

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

相关问题