【问题标题】:How can I create a regular expression that accepts at least one lowercase and one digit?如何创建一个至少接受一个小写字母和一个数字的正则表达式?
【发布时间】:2017-08-19 13:26:06
【问题描述】:

此表达式必须遵守特定规则:

1.- 总共 2 到 8 个字符。
2.- 以大写开头。
3.- 包含小写和数字。

第一个和第二个应该很容易,但我无法让第三个工作。

这是我想出来的表达方式

([A-Z]+[A-Za-z0-9]*){2,8}  

但它返回不正确的响应。正则表达式远非我的强项,这是我第一次在课外使用它们。

这是我的代码,如果有帮助的话

    var expresion = /([A-Z]+[A-Za-z0-9]*){2,8}/;
    var re = new RegExp(expresion); 
    var t = $('#code').val(); 
    if (re.test(t)) { 
        console.log(t+' works');
    } else {
        console.log(t+' not working');
    }

【问题讨论】:

  • 根据regex 标签上的规则,也请使用javascript 进行标签。在不相关的评论中,如果这是真正的密码验证情况,请不要 - 它使密码 less 安全。
  • 我不认为这是密码验证。这看起来更像是标识符命名约定(尽管通常也允许下划线)。
  • 给定项目 2 和 3,最少 3 个字符:1,以大写开头,2 包含小写和数字 -- 即至少 3 个字符。
  • 允许2个字符,怎么能满足大写开头,小写和数字都包含的要求?

标签: javascript regex


【解决方案1】:

使用符合每个条件的look aheads

/^(?=[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.{2,8}$)(.*)/m

Demo

(如 cmets 中所述,您的目标模式至少为 3 个字符,其他条件...)

【讨论】:

  • 仍然会匹配更大的字符串,因为您不会在长度前瞻中终止。例如。使用"Qwertyuiopasdfghjklzxcvbnm9" 进行测试。
  • 啊!固定的! ;-)
【解决方案2】:

这应该符合您的字面要求(但是,正如 cmets 所说,它们并没有真正意义):

^(?=.{2,8}$)(?=.*[0-9])(?=.*[a-z])[A-Z][a-zA-Z0-9]*$

首先,您需要使用^(字符串开头)和$ 锚定您的匹配;否则你只能选择一个匹配的子字符串,这会弄乱你的要求。

其次,我们使用前瞻来验证几个单独的点:字符串在结束之前包含 2 到 8 个字符,字符串包含一个数字。

第三,我们使用字符类来验证它是否以大写字母开头,并以大写、小写和数字的混合形式继续。

编辑:忘记小写要求,谢谢 nnnnnn。你是对的,你的版本更好。

【讨论】:

  • 这个正则表达式接受像"A123" 这样不带小写字母的字符串。此外,长度预测不是比将{1,7} 放在末尾:^(?=.*[0-9])(?=.*[a-z])[A-Z][a-zA-Z0-9]{1,7}$ 更复杂且效率更低吗?
猜你喜欢
  • 2016-12-14
  • 2018-07-11
  • 2018-11-07
  • 1970-01-01
  • 2015-05-24
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多