我想用preg_match()
来验证PHP中的用户名,但我似乎无法按照我想要的方式工作。我需要preg_match()
到:如何使用`preg_match()`来匹配用户名
- 接受在字符串
- 接受句点,破折号,下划线字母的开头和结尾只有字母或数字,数字
- 必须有5-20个字符 之间的长度
preg_match('/^[a-zA-Z0-9]+[.-_]*[a-zA-Z0-9]{5,20}$/', $username)
我想用preg_match()
来验证PHP中的用户名,但我似乎无法按照我想要的方式工作。我需要preg_match()
到:如何使用`preg_match()`来匹配用户名
preg_match('/^[a-zA-Z0-9]+[.-_]*[a-zA-Z0-9]{5,20}$/', $username)
分解要求成小块,你会发现它变得容易多了:
~^[a-z0-9]{1}[a-z0-9._-]{3,18}[a-z0-9]{1}$~i
如果正则表达式是混淆了你,你总是可以将字符与正则表达式匹配,然后用strlen()
明确检查字符串的长度。
$valid = preg_match('/^[a-zA-Z\d]+[\w.-]*[a-zA-Z\d]$/', $username)
AND strlen($username) >= 5 AND strlen($username) <= 20;
if (preg_match('~^[0-9a-z][-_.0-9a-z]{3,18}[0-9a-z]$~i', $username) > 0)
{
// valid
}
@alex:你错了。 =) – 2012-04-02 00:39:48
您需要在第二组括号中转义该点,否则它将与任何字符匹配。 – Madbreaks 2012-04-02 01:01:02
@Madbreaks:不,它不会。你也错了。 =) – 2012-04-02 01:08:20
由于括号意味着与集合中的任何_one_字符匹配,因此不需要使用“{1}”。另外,您需要在第二组括号内跳过点,否则显然会与任何字符匹配。 – Madbreaks 2012-04-02 01:00:12
@Madbreaks其实,我认为在这种情况下,这段时间不必逃避。尽管如此,这样做绝对没有坏处。至于{1},你说得对,那些是多余的,但我喜欢把它们放在部分习惯之外,部分原因是我喜欢我的常规表达尽可能清楚。 – Corbin 2012-04-02 01:07:05
感谢Corbin,你对这个点是正确的 - 谢谢你指出我的错误! – Madbreaks 2012-04-02 01:11:09