我希望用户名是包含_
或-
的任何字符,但Perl中的这个字符不起作用,为什么会这样?
if ("kunjaaN-" =~ /^[a-zA-Z-_]{1,7}$/)
{ print "equal" ; }
答案 0 :(得分:10)
它不起作用,因为kunjaaN-
是八个字符,你将自己限制在1..7
对于用户名,为什么不将限制增加到合适的位置?
此外,如果您想要包含_
,则需要将其包含在角色类中。
试试这个正则表达式:
^[a-zA-Z_-]{1,16}\z
注意:强>
在字符类内部,-
字符可以具有特殊含义。例如,[a-z]
表示'以a
开头并以z
'结尾的字符范围,而[az-]
表示'a
或{{1} }或z
'。
要使-
非特殊,您可以将其放在类的开头或结尾,或者使用反斜杠将其转义。 -
将与[a\-z]
或a
或z
匹配
逃避通常是首选,因为如果无意中将额外的字符添加到课程的末尾,它可以避免意外。
答案 1 :(得分:4)
如果您不想在字符串末尾允许可能的换行符,请使用\ z end of string anchor而不是$ anchor:
/^[a-z_-]{1,8}\z/i