gpt4 book ai didi

php - 正则表达式验证用户名

转载 作者:行者123 更新时间:2023-12-02 17:45:14 25 4
gpt4 key购买 nike

我试图理解这个正则表达式模式有什么问题:

'/^[a-z0-9-_\.]*[a-z0-9]+[a-z0-9-_\.]*{4,20}$/i'

我想做的是验证用户名。允许的字符包括字母数字、破折号、下划线和点。我试图实现的限制是至少有一个字母数字字符,因此用户将不允许拥有这样的昵称:_-_。

我现在使用的功能是:

function validate($pattern, $string){
return (bool) preg_match($pattern, $string);
}

谢谢。

编辑

正如 @mario 所说,是的,这是 *{4,20} 的问题。我现在尝试做的是添加 ( ) 但这不起作用:

'/^([a-z0-9-_\.]*[a-z0-9]+[a-z0-9-_\.]*){4,20}$/我'

现在它匹配“aa--aa”,但不匹配“aa--”和“--aa”。还有其他建议吗?

编辑

也许有人想要拒绝看起来不好看的用户名,例如“_..-a”。此正则表达式将拒绝具有连续的非字母数字字符:

/^(?=.{4,20}$)[a-z0-9]{0,1}([a-z0-9._-][a-z0-9]+ )*[a-z0-9.-_]{0,1}$/i

在这种情况下,_-this-is-me-_ 将不匹配,但 _this-is-me_ 将匹配。

祝你有美好的一天,谢谢大家:)

最佳答案

不要试图将所有内容都塞进一个正则表达式中。让您的生活更简单并使用两步方法:

return (bool)
preg_match('/^[a-z0-9_.-]{4,20}$/', $s) && preg_match('/\w/', $s);

您的正则表达式中的错误可能是 *{n,m} 的混淆。您只能使用这些量词之一,而不能同时使用 *{4,20}

<小时/>

很好,这是您想要的繁琐的解决方案:

 preg_match('/^(?=.{4})(?!.{21})[\w.-]*[a-z][\w-.]*$/i', $s)

断言断言长度,第二部分确保至少存在一个字母。

关于php - 正则表达式验证用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5609243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com