繁体   English   中英

PHP正则表达式模式,用于匹配用户名

[英]PHP regex pattern for matching username

我正在开发一个laravel应用程序,用户可以在其中通过将用户名输入适当的形式来引用其个人资料。

让我们来看一个例子:

名为John的用户可以使用以下文本引用其个人资料:@John

我花了几个小时试图了解正则表达式的工作原理,但是到目前为止,这种模式是我现在所要做的: @([A-Za-z0-9]+)

此模式与上面的示例完全匹配,但也与通常不应该使用的其他格式匹配。

我需要一些帮助来创建完美的图案。

它只能匹配以@符号开头的字符串。 例如:@ John,@ Sam,@ Bill等。

它不应与不以@符号开头的字符串匹配。 例如:a @ John,something @ Sam,123 @ Bill等。

它还应与包含多个@符号的那些格式匹配。 例如:@John @,@ Sam @ something,@ Bill @@ sometext等。在这种情况下,模式应捕获:John @,Sam @ something,Bill @@ sometext

感谢您的帮助,对不起我的英语不好。

这应该工作:

(?<=\s|^)@([\w@]+)

在断言后面有一个肯定的后置断言,以确保标记之前带有空格或字符串的开头。 之后,只需要使用@字符并将用户名放在捕获组中即可。

正则表达式演示

您的正则表达式几乎是正确的。 首先,您想说您的正则表达式也应该匹配字符串的开头。 您可以使用插入符号(^)来实现:

^@([A-Za-z0-9]+)

其次,您希望能够将@符号放入其中。 现在很容易-只需在括号内添加该符号即可。

^@([A-Za-z0-9@]+)

尝试/(?:\\s@{1,3})([a-zA-Z@.]+)/i


说明

@角色。 匹配一个“ @”字符(字符代码64)。 {1,3}量词。 在前一个令牌的1和3之间匹配。

\\ w字。 匹配任何单词字符(字母数字和下划线)。 +加号。 匹配1个或多个前面的令牌。

这是regexr: http: //regexr.com/3djhq

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM