我试图写一个用户名验证,具有以下限制:正则表达式来验证用户名与至少一个字母和特殊字符
- 必须包含至少1个字母(A-ZA- Z)
- 只能包含数字,字母等什么,或者强调
下面的例子是有效的:ABC123,MY_NAME,12345a
下面的例子是无效的:123456,my_name !, _1235
我发现了一些关于使用积极lookaheads的字母contraint:(?=。* [a-zA-Z]),它看起来可能有某种负面向前看第二个约束,但我不知道如何将它们混合成一个正则表达式。 (注意......我并不十分清楚这个。*部分在向前看的内容......)
是这样的:/(?=。* [a-zA-Z])(? !* [^ A-ZA-Z0-9 _])/
编辑:
因为问题问一个正则表达式,我接受的答案是:
/^[a-zA-Z0-9_]*[a-zA-Z][a-zA-Z0-9_]*$/
然而,我实际上要实施的是Bryan Oakley建议将它分成多个小检查。这使得在需求变化的情况下将来可以更容易地阅读和扩展。谢谢大家!
而且因为我这个标记用的Ruby-on-轨道,我会包括我实际使用的代码:即解决您的问题
validate :username_format
def username_format
has_one_letter = username =~ /[a-zA-Z]/
all_valid_characters = username =~ /^[a-zA-Z0-9_]+$/
errors.add(:username, "must have at least one letter and contain only letters, digits, or underscores") unless (has_one_letter and all_valid_characters)
end
Sweet,它在第一次测试中缺少_或0以上的有效值,但除此之外,它的工作原理! – Paul 2011-05-23 20:02:37