我有注册表和输入"instagram用户名"。
Instagram用户名只能包括:a-z A-Z 0-9 dot(.) underline(_)
这是我的代码:
if(!empty($instaUsername) && preg_match("/([A-Za-z._])\w+/", $instaUsername)) {
throw new Exception ("Your name Instagram is incorrect");
}
当$instaUsername = "name.123"
或"name_123"
时,这会给我错误。
如何按照以下要求制作正则表达式?a-z A-Z 0-9 dot(.) underline(_)
我很乐意有良好的教程regex作为评论。
8条答案
按热度按时间atmip9wb1#
jstassen对insta用户名有很好的评价:
fgw7neuy2#
所以你想要一个正则表达式来验证Instagram的用户名吗?那么,我们应该先研究一下实际的需求是什么吗?好的,让我们开始吧!
...
看起来Instagram并没有明确说明有效用户名的要求。所以我注册了一个账号,检查了它接受哪些用户名,拒绝哪些用户名,以了解这些要求。我发现的要求如下:
a-z A-Z 0-9 dot(.) underline(_)
.将所有这些放在一起将得到以下正则表达式:
Try it out here with examples!
stszievb3#
从评论部分继续前进,这就是你想要的:
vwhgwdsa4#
这个正则表达式应该适合你:
可以使用anchors来匹配输入的开始(
^
)和结束$
,并且使用modifieri
来区分大小写。6g8kf2rb5#
我发现这里的很多答案都太复杂了,而且没有考虑到用户名在句子中的使用(比如
hey @man... what's up?
),所以我自己做了一个上面写着:
@
:查找@符号(可选)([\w][\.]{0,1})+
:查找一个单词字符(A-Z、0-9、_),一行中最多1个点,*
,次数可任意选择(例如,允许@u.s.e.r.n.a.m.e
,但不允许@u..sername
)(?:
在上面之前的this仅表示“实际上不为此创建捕获组”[\w]
以单词字符结尾(即不允许最后使用点,如@username.
应排除点)如果你想像IG一样把用户名限制在30个字符以内,那么:
这只是将所有内容 Package 在另一个非捕获
(?:
组中,并将总长度限制为29个字符guykilcj6#
好吧,所以我的编辑被拒绝了,因为我应该把它作为一个答案或评论发布,所以
kfgdxczn7#
我使用此模式
zz2j4svz8#
有效寄存器regex