0

我正在使用这个^[a-z0-9_-]{3-20}$正则表达式来验证用户名..

我的要求

  • 它应该在 3-20 之间
  • 除了连字符和下划线之外,它不应该有特殊字符
  • 它应该以字母开头

这个正则表达式有什么问题

  • 它检查 3-20,但当字符串在 3-20 之间有特殊字符时,它也会返回 true
  • 当特殊字符介于 1-3 之间时它可以工作(返回 false {what is expected}),但当特殊字符介于 3-20 之间时它会失败(返回 true {what is not expected})...

我正在使用 yii 框架和默认规则匹配模式...是 yii 故障...?

4

1 回答 1

8

你可以使用这个:

/^[a-z][a-z0-9_-]{2,19}$/i

您必须使用 a,在大括号量词中写入范围。我首先放置了一个唯一的字母字符类以遵循您的规范(以字母开头),因此我将量词减少为{2,19}

我假设你允许大写字母,我添加了一个i修饰符,但如果你只允许小写字母,你可以删除它。

请注意,您可以这样编写此正则表达式:

/^[a-z][\w-]{2,19}$/i

因为\w代表[a-zA-Z0-9_]

于 2013-09-01T20:40:10.783 回答