正则表达式排除长串数字

regex to exclude long string of numbers

我正在使用以下内容来验证结帐表单中的字段。

^[a-zA-Z0-9)(,'-/\&.#? ]*$

我们遇到过一些客户错误地在这些字段中添加他们的抄送号码的问题,我们希望排除任何连续超过 12 的数字串,以期缓解该问题。我怎样才能做到这一点?

您可以使用负数 lookahead 来断言连续的数字不是 12 个或更多:

^(?!.*[0-9]{12,})[a-zA-Z0-9)(,'-/\&.#? ]*$

(?!.*[0-9]{12,}) 表示:

  • (?! 开始否定前瞻
    • .* 匹配任意字符零次或多次
    • [0-9]{12,} 匹配一个数字 12 次或更多次(如果你想精确匹配 12 个数字,你可以使用 {12}
  • ) 关闭否定前瞻

这将匹配不包含 12 个字符的字符串的行:

^(?!.*\b[a-zA-Z0-9)(,'\-\/\&.#? ]{12}\b.*).*$

Sample online regex. 注意我使用了问题中提供的括号表达式,但转义了短划线 - 和斜线 /。也使用量词 {12}.