【问题标题】:Regex - Alphanumeric specific length and numbers greater zero正则表达式 - 字母数字特定长度和大于零的数字
【发布时间】:2015-07-24 23:01:46
【问题描述】:

我必须检查一个字符串是否有以下要求:

  • 具体长度为7
  • 允许使用字母数字
  • alpha 值之后的数值必须大于零: -- B000100 没问题 -- B000000 不行
  • 单词不能以下列字符开头: -- KZ、SA、SS、HJ、S、D

我已经建立了一个正则表达式模式,但是对于以下数字大于零的 Alpha 值的问题,我遇到了问题:

有效

A000001

AB00001

A100000

A100001

ABCABCA

GR00001

GR12345

无效

12345

A000001A

A0000012A

A000000

GR00000

ABCAB00

正则表达式模式: ^(?!^KZ)(?!^HJ)(?!^S)(?!^D)(?!0{7})[A-HJ-Z0-9]{7}$

如何检查这个值?

A000000

GR00000

ABCAB00

【问题讨论】:

  • 仅使用正则表达式可能会非常复杂。你愿意使用 perl 或 python 之类的东西吗?
  • 如果模式中可以有多个“数字”,例如A000B00,其中两个数字都必须非零,这对于正则表达式来说太复杂了。不要使用一个。

标签: regex


【解决方案1】:

这个正则表达式^(?!KZ|HJ|S|D|([A-HJ-Z]+)?0+$)[A-HJ-Z0-9]{7}$ 可以。见demo

正则表达式的作用是在行首之后确保以下条件都不匹配

  • KZ
  • HJ
  • S
  • D
  • ([A-HJ-Z]+)?0+$ 这个确保你不能有 0 直到行尾 optionnaly 之前有 char。

它是您原来的否定前瞻的修改版本,为了清晰起见,用交替压缩。

【讨论】:

  • 请注意,此正则表达式会将0000000 标记为有效。不一定是问题,因为问题没有具体说明这一点,但认为值得强调。
  • 这是一个很好的方法,它适用于所有示例,但从描述来看,A10000A 似乎不匹配(看起来总是数字),但你的表达方式会匹配。跨度>
  • @maraca 这部分要求不清楚(字符后跟数字或混合)
  • @Alec true,我已经更新,因为原始正则表达式会拒绝所有 0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多