用户名正则验证问题:需含至少6个字母,可含数字与下划线
用户名正则验证解决方案
正确正则表达式
^(?=(?:[^a-zA-Z]*[a-zA-Z]){6,})[a-zA-Z0-9_]+$
正则逻辑说明
(?=(?:[^a-zA-Z]*[a-zA-Z]){6,}):正向预查规则,确保整个字符串中英文字母总数不少于6个。其中[^a-zA-Z]*匹配任意数量的非字母字符(数字、下划线),随后匹配一个英文字母,该组合重复6次及以上,就能满足总字母数要求,不管字母是否连续。[a-zA-Z0-9_]+:限制整个字符串只能由英文字母、数字、下划线组成,符合规则要求。
之前正则的问题
- 你尝试的第一个正则
[\d\_]*[a-zA-Z]{6,}[\d\_]*:要求字符串中必须存在连续6个英文字母,但像ede_96hek这种字母分散(总6个但不连续)的情况就无法匹配。 - 第二个正则同样存在要求连续字母的问题,还额外加了不必要的首尾限制,自然也无法匹配分散字母的场景。
验证示例
以下示例均能被正确正则匹配:
abcdef、abc9def、_testaa、__test_aa_、hello_h_9、_9helloa、9a8v6f_aaa、ede_96hek
内容的提问来源于stack exchange,提问作者Shourya Shikhar
相关产品推荐
相关产品推荐

