是否需要仅用于字母数字的正则表达式(无纯数字或字母)并且正好限制为10个字符?

时间:2019-04-09 16:31:34

标签: regex

我遇到了这个问题,在过去的问题中找不到。

条件:

  1. 拒绝纯数字
  2. 拒绝纯字母
  3. 拒绝任何符号
  4. 仅接受字母数字组合
  5. 必须等于10个字符

这是我的作品以及每个作品的问题:

  1. ^(?!^\d*$)[a-zA-Z\d]{10}$

    • 这不符合标准#2
  2. ^[a-zA-Z0-9]{10}$

    • 这不符合标准#1

我尝试了其他一些符合所有条件,但没有达到10个字符的限制的尝试。

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

您可以再次进行前瞻:

^(?!\d+$)(?![a-zA-Z]+$)[a-zA-Z\d]{10}$

请参见regex demoRegulex graph

enter image description here

详细信息

  • ^-字符串的开头
  • (?!\d+$)-否定的前瞻性,可确保整个字符串不只由数字组成
  • (?![a-zA-Z]+$)-整个字符串不能全部为字母
  • [a-zA-Z\d]{10}-10个字母或数字
  • $-字符串的结尾。

答案 1 :(得分:1)

尝试一下:

(?=^.{10}$)^([a-z]+\d[a-z0-9]*|\d+[a-z][a-z0-9]*)$

Demo

说明:

(?=^.{10}$)^([a-z]+\d[a-z0-9]*|\d+[a-z][a-z0-9]*)$
(?=^.{10}$)                                         # there's exactly 10 characters following
           ^(                 |                 )$  # we match the entire string, containing either:
             [a-z]+\d[a-z0-9]*                      # letters, followed by a number, followed by alphanumerics, or
                               \d+[a-z][a-z0-9]*    # numbers, followed by a letter, followed by alphanumerics

答案 2 :(得分:1)

使用前瞻性查找至少一种您需要的每种字符,并在正则表达式的“常规”部分中指定长度和字符限制:

^(?=.*[a-zA-Z])(?=.*\d)[0-9a-zA-Z]{10}$

  • (?=.*[a-zA-Z])-向前看,找到一封信,
  • (?=.*\d)-向前看,找到一个数字
  • [0-9a-zA-Z]{10}-恰好10位数字/字母字符