首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查输入(字母数字)是否包含小于X的数字的Regex

检查输入(字母数字)是否包含小于X的数字的Regex
EN

Stack Overflow用户
提问于 2016-03-13 19:31:05
回答 2查看 78关注 0票数 0

对于正则术士来说,这可能很容易,但是我似乎无法用我有限的知识找到一种方法。

我需要一个正则表达式来检查一个字母数字字符串是否包含一个小于数字的数字(在我的例子中是16539065)。

例如,应匹配以下内容:

alpha16000000beta foo300bar

以下各点不应相匹配:

foo16539066bar

请帮帮忙。

编辑:我知道这是低效的,但是我是在cPanel帐户级别的过滤器中这样做的,它只接受regex。除非我想出一种方法来触发脚本,否则这肯定需要用regex来完成。:(

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-13 20:21:27

坏的因果报应可能会杀了我,但这是一个解决你的案例的有效方法(字母然后是数字,然后是字母)。它将不适用于例如ab12cd34de。没有一种方法可以对任何东西进行短编码,只有很长的一段路。我用负前瞻来检查,这个数字不大于或等于16539065。

代码语言:javascript
运行
复制
^\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

票数 0
EN

Stack Overflow用户

发布于 2016-03-13 19:53:08

这种操作的最佳选择是使用捕获组获取数字,然后使用任何语言进行比较。如果您一定要使用regex来完成这个任务,那么它将是非常低效率的。要做到这一点,您需要结合许多类似的表达式:

  • D{1,7}将找到任何1到7位数的数字,这些数字总是小于16539065。
  • 16539061-4将捕获所接受的绝对值最大值。
  • 1653901-5\d将捕获下一个可接受的值范围。
  • 16531-8天将继续在可接受的范围内
  • 重复上述步骤,直到达到11-5 d{6}

一旦有了所有这些表达式,就可以使用“或”运算符组合它们。请记住,以这种方式使用正则表达式被认为是错误的做法,并且会造成难以阅读的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35974759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档