正则表达式检查输入(字母数字)是否包含小于X的数字

时间:2016-03-13 19:31:05

标签: regex

这对于正则表达式魔术师来说可能很容易,但是我似乎无法通过我有限的知识找到方法。

我需要一个正则表达式,用于检查字母数字字符串是否包含小于数字的数字(在我的情况下为16539065)。

例如,应匹配以下内容:

alpha16000000beta foo300bar

以下内容不应匹配:

foo16539066bar

请帮助。

编辑:我知道它效率低下,但是我在cPanel帐户级别过滤器中执行此操作,该过滤器只接受正则表达式。除非我找到一种方法来触发脚本,否则这肯定需要用正则表达式来完成。 :(

2 个答案:

答案 0 :(得分:1)

此类操作的最佳选择是使用捕获组获取数字,然后使用您使用的任何语言进行比较。如果你绝对必须使用正则表达式来做这件事,那将是非常低效的。为此,您需要结合许多类似的表达式:

  • \ d {1,7}会找到1至7位数的任何数字,总是小于16539065
  • 1653906 [1-4]将捕获接受的绝对最大值
  • 165390 [1-5] \ d将捕获下一个可接受的值范围
  • 1653 [1-8] \ d {3}将继续在可接受的范围内
  • 重复上述步骤,直至达到1 [1-5] \ d {6}

获得所有这些表达后,可以使用'或'组合它们。运营商。请记住,以这种方式使用正则表达式被认为是不好的做法,并且会产生难以阅读的代码。

答案 1 :(得分:0)

Bad Karma可能会杀了我,但这是一个适用于你的案件的工作解决方案(字母然后数字然后字母)。它不适用于例如ab12cd34de。 没有什么方法可以对任何东西进行短代码处理,只有很长的路要走。我使用负向前瞻来检查,数字不大于或等于16539065。

^\D*(?!0*(?:\d{9}|2\d{7}|1[7-9]\d{6}|16[6-9]\d{5}|165[4-9]\d{4}|16539[1-9]\d{2}|165390[7-9]\d|1653906[5-9]))\d+\D*$

检查一般格式^\D*\d+\D*$,然后将16539065滚动到它的部分。

这是一个可以玩的小演示:https://regex101.com/r/aV6yQ9/1