9

我需要一个(php)正则表达式来匹配雅虎的用户名规则:

使用 4 到 32 个字符并以字母开头。您可以使用字母、数字、下划线和一个点 (.)。

4

4 回答 4

16
/^[A-Za-z](?=[A-Za-z0-9_.]{3,31}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/

或者更短一点:

/^[a-z](?=[\w.]{3,31}$)\w*\.?\w*$/i
于 2008-10-03T22:25:52.153 回答
7
/[a-zA-Z][a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*/

并检查 strlen($username) >= 4 和 <= 32。

于 2008-10-03T21:25:27.407 回答
2

一个点的限制?这很棘手。

我不是正则表达式专家,但我认为这会得到它,除了:

[A-Za-z][A-Za-z0-9_.]{3,31}

也许你可以检查一下。分别要求?

于 2008-10-03T21:24:22.183 回答
1

使用前瞻,您可以执行以下操作:

^(?=[A-Za-z](?:\w*(?:\.\w*)?$))(\S{4,32})$

因为你没有指定你需要什么类型的正则表达式,所以我添加了很多 Perl 5 兼容的东西。就像(?: ... )非捕获括号一样。

注意:我添加了缺少的关闭括号。

于 2008-10-03T22:25:21.607 回答