【问题标题】:Regular expression - starting with 3 alphanumeric characters which includes at least one letter and one number, and ending with a letter正则表达式 - 以 3 个字母数字字符开头,其中至少包括一个字母和一个数字,并以一个字母结尾
【发布时间】:2017-10-24 16:16:37
【问题描述】:

我正在尝试制作符合以下条件的正则表达式:

  1. 4 个字符。
  2. 前 3 个字符必须是字母数字字符,至少包括一个字母和一个数字。
  3. 最后一个字符必须是字母。

所以我希望结果是:

  • case1: abcd -> 不匹配
  • case2: 234d -> 不匹配
  • case3: a23c -> 匹配
  • case4: 3abc -> 匹配
  • case5: xy23 -> 不匹配

我测试了以下匹配条件 2 的正则表达式,但仍然找不到匹配条件 1&3 的解决方案。

^(?!.*[^a-zA-Z0-9])(?=.*\d)(?=.*[a-zA-Z]).{3}$

我试过这个,但在 case2 上失败了。

^(?!.*[^a-zA-Z0-9])(?=.*\d)(?=.*[a-zA-Z]).{3}[a-zA-Z]$

如何结合这些条件?谢谢!

【问题讨论】:

  • 嗨明华,你确定要使用哪种模式了吗?下面长的还是上面短的?
  • 感谢 Wiktor Stribiżew,我最终采用了您的解决方案,但您的两个解决方案都适用于我的情况。谢谢你们。
  • 请使用@+用户名通知我们您的 cmets。我在下面发布了答案,请考虑接受(单击左侧的灰色勾号),因为您选择了我的解决方案。

标签: regex


【解决方案1】:

你可以使用

^(?=.{0,2}[0-9])(?=.{0,2}[a-zA-Z])[0-9a-zA-Z]{3}[a-zA-Z]$

regex demo

详情

  • ^ - 字符串开头
  • (?=.{0,2}[0-9]) - 0 到 2 个字符后必须有一个 ASCII 数字
  • (?=.{0,2}[a-zA-Z])- 0 到 2 个字符后必须有一个 ASCII 字母
  • [0-9a-zA-Z]{3} - 3 个 ASCII 字母数字
  • [a-zA-Z] - 一个 ASCII 字母
  • $ - 字符串结束

【讨论】:

    【解决方案2】:

    无需为 3 或 4 个字符使用复杂的功能:

    /^(?:[a-z0-9](?:[0-9][a-z]|[a-z][0-9])|[0-9][a-z]{2}|[a-z][0-9]{2})[a-z]$/i
    

    /^(?:[a-z](?:[0-9][a-z0-9]|[a-z][0-9])|[0-9](?:[a-z][a-z0-9]|[0-9][a-z]))[a-z]$/i
    

    【讨论】:

      猜你喜欢
      • 2015-05-24
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2016-12-14
      • 1970-01-01
      • 2017-07-06
      相关资源
      最近更新 更多