如何使用`preg_match()`来匹配用户名

时间:2012-04-02 00:32:13

标签: php regex preg-match username

我正在尝试使用preg_match()验证PHP中的用户名,但我似乎无法按照我想要的方式运行它。我需要preg_match()来:

  1. 只接受字符串开头和结尾的字母或数字
  2. 接受句号,破折号,下划线,字母,数字
  3. 的长度必须介于5-20个字符之间
  4. preg_match('/^[a-zA-Z0-9]+[.-_]*[a-zA-Z0-9]{5,20}$/', $username)
    

3 个答案:

答案 0 :(得分:6)

将需求细分为更小的部分,您会发现它变得更容易:

  • 第一个字符必须是1个字母或数字
  • 中间字符必须是句点,短划线,字母或数字
  • 最后一个字符必须是字母或数字
  • 由于第一个和最后一个段必须是1个字符,因此中间必须是3到18
~^[a-z0-9]{1}[a-z0-9._-]{3,18}[a-z0-9]{1}$~i

答案 1 :(得分:2)

如果正则表达式让您感到困惑,您可以始终将字符与正则表达式匹配,然后使用strlen()显式检查字符串的长度。

$valid = preg_match('/^[a-zA-Z\d]+[\w.-]*[a-zA-Z\d]$/', $username)
         AND strlen($username) >= 5 AND strlen($username) <= 20;

答案 2 :(得分:2)

if (preg_match('~^[0-9a-z][-_.0-9a-z]{3,18}[0-9a-z]$~i', $username) > 0)
{
    // valid
}