我搜索grep
命令来检查用户名,如: -
mi.ma
ab-bc
ab.bc-ad
ab_de
mima
不允许应该:
..mima
mima..
mia--bc
mia---ad
ab___de
__ab
ab__
允许应为a-z, 0-9, -, ., _
但不能加倍-, ., _
,这也不在前面或后面。它必须分钟。有3个字符。
答案 0 :(得分:2)
下面:
^[a-z0-9]+(?:[._-]?[a-z0-9]+)*$
说明:
[a-z0-9]+
确保用户名称STARTS带有(小写)字母或数字。[._-]?
允许存在一个(或无)"."
,"_"
或"-"
字符。[a-z0-9]+
确保用户名ENDS带有(小写)字母或数字。(...)*
中包含第二个组可以在用户名中间添加多个"."
,"_"
或"-"
个字符(只要它们用字母分隔即可/数字),例如"ab.bc-ad"
。修改强>
我刚刚注意到你匹配的最终条件:
它必须分钟。有3个字符。
将此作为正则表达式的一部分添加的最简单方法是使用前瞻 - 即:
^(?=.{3,})[a-z0-9]+(?:[._-]?[a-z0-9]+)*$
这是一个带有其他测试字符串的updated demo。
<强> EDIT2:强>
以上内容对PHP
完全有效。但是,如果有人在阅读此内容时实际上是在使用grep
寻找答案(即与PHP
无关...)
首先请注意,您可以使用-x
修饰符来匹配精确字符串,因此请取消^
和$
锚点。然后,您有两个选项可以完成这项工作:
将上述代码与grep -P
或等效pcregrep
一起使用,因为标准grep
工具不支持前瞻:
pcregrep -x "(?=.{3,})[a-z0-9]+([._-]?[a-z0-9]+)*" <filename>
使用grep -E
或等效egrep
作为特殊字符支持;通过第二个grep
输出输出以满足“min 3 chars”条件:
egrep -x "[a-z0-9]+([._-]?[a-z0-9]+)*" <filename> | grep ...
答案 1 :(得分:0)
@TomLord回答是正确的。
我独立地得到完全相同的答案(一分钟后:-(),但是对于PHP(因为你添加了php
标签...),所以我也写了......:
preg_match('/^[a-z0-9]+(?:[._-]?[a-z0-9]+)*$/', $name);