【问题标题】:Regex: Exclude 5 digit numbers正则表达式:排除 5 位数字
【发布时间】:2020-06-02 11:23:08
【问题描述】:

正则表达式应匹配不包含 5 位数字的每个值(+ whitepsaces):

  • 12345 - 不匹配
  • abc12345 - 不匹配
  • abc123456 - 匹配
  • 12345abc - 不匹配
  • 123456abc - 匹配
  • abc12345abc - 不匹配
  • abc123456abc - 匹配
  • abc123 - 匹配

当前的正则表达式无法正常工作,因为它不排除超过 5 位的数字

^(?!(?:\.|^)(\d{5})(?:\.|$)).*$

https://regex101.com/r/CRcZzM/1

【问题讨论】:

  • 使用^(?!.*(?<!\d)\d{5}(?!\d)).* / ^(?!.*(?:\D|^)\d{5}(?!\d)).*,见regex demo。或者,在代码中,类似if REGEXP.TEST(/(?<!\d)\d{5}(?!\d)/, string) THEN return false
  • 非常感谢!它非常适合我。

标签: regex


【解决方案1】:

你可以使用

^(?!.*(?<!\d)\d{5}(?!\d)).*
^(?!.*(?:\D|^)\d{5}(?!\d)).*

请参阅regex demo

详情

  • ^ - 字符串开头
  • (?!.*(?&lt;!\d)\d{5}(?!\d)) - 如果在当前位置的右侧有
    • .* - 除换行符之外的任何 0 个或多个字符,尽可能多。
    • (?&lt;!\d)\d{5}(?!\d) - 一个五位字符串 (\d{5}) 既不在 ((?&lt;!\d)) 之前也不在数字之后 ((?!\d))
  • .* - 除换行符之外的任何 0 个或多个字符,尽可能多。

如果您不需要完整的字符串匹配,则不需要最后一个 .*

【讨论】:

    猜你喜欢
    • 2022-07-22
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多