preg_match() and username

匿名 (未验证) 提交于 2019-12-03 02:52:02

问题:

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

Easy one.., i have this, can you explain what it checks for? I know it checks if the username have length between 2-20, what more? Thanks

回答1:

It searches for text containing only alphanumeric and underscore characters, from 2 to 20 characters long.

/^[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


回答2:

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

Splicing it up:

/ is the regex delimiter; you can choose anything you like, but a forward slash is the most common one.

^ means 'match beginning of input': The following expression must be at the beginning for the regex to match.

[a-z\d_] is a character class; it means 'any of the characters between the square brackets'; the backslash combined with the d is a shortcut for 'digits', and the dash indicates an inclusive range; thus, the character class says 'any letter or digit, or the underscore'.

{2;20} is a quantifier that says that the preceding expression (the character class) must be repeated 2 to 20 times.

$ means 'match end of input', similar to ^.

Another / terminates the regex itself; what follows are procession options, in this case i, which means 'case-insensitive'.



回答3:

It checks to see that the username consists of 2 to 20 characters that are letters (uppercase or lowercase thanks to the i flag), numbers or an underscore.

This can be abbreviated in two ways: firstly, the if construct is unnecessary. Secondly, you can use \w as a substitute for those same characters, so:

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


回答4:

It literally checks if $username consists of a sequence of 2 to 20 characters of a-z, A-Z (because of the i flag for case insensitivity), 0-9 (for \d), and _.



回答5:

It's also checking if it contains any characters other than the alphabet, a-z and A-Z, digits 0-9, and _.

Or you could say, checking that it only contains alphanumeric characters and _.

This could be rewritten to be simpler, too - preg_match returns an int, so there's no reason to use the 'return false, return true' pattern.

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

Would do the same thing.

Also, \w means the same thing as those characters. Letters, digits and underscore. So even better would be

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


回答6:

It is checking for a 2-20 characters long case-insensitive alphanumeric word that consists of letters, numbers and _



转载请标明出处:preg_match() and username
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!