正数范围 18-65 的正则表达式是啥?它必须只接受两位数
Posted
技术标签:
【中文标题】正数范围 18-65 的正则表达式是啥?它必须只接受两位数【英文标题】:What is the regex for positive number range 18-65? It must accept only two digits正数范围 18-65 的正则表达式是什么?它必须只接受两位数 【发布时间】:2019-12-02 06:19:47 【问题描述】:我想要一个范围在 18-65 之间的正则表达式。
我使用了这个 -> 1[89]|[2-5][0-9]|6[0-5]
但它不能正常工作,并且还接受超过两位数。请提出建议。
我想输入 18-65 岁之间的年龄。
【问题讨论】:
正则表达式对此太过分了。num >= 18 && num <=65
就够了
regex
不是适合这项工作的工具。它可以用来检查一个字符串是否看起来像一个数字(即只包含数字),但这就是它的力量结束的地方。然后解析字符串,得到一个数字,并将数字与限制进行比较。
【参考方案1】:
您非常接近,您的表达式的问题是您缺少锚标记,这表明正则表达式引擎应该只匹配给定的字符串(如果之前或之后出现任何其他内容,则使其失败)。
稍微改变你的表达方式,如下:^(1[89]|[2-5][0-9]|6[0-5])$
(例如here)。前面的^
确保匹配从字符串的最开头开始,而末尾的$
确保匹配在字符串的末尾停止。这可以确保您提供的字符串与您想要的模式相匹配,作为一个整体,因此,19
将被匹配,但 119
不会。
或者(因为它很可能会被提议),用-
分割然后使用通常的数学运算符会更容易。
【讨论】:
@RoshanYadav:如果回答对你有帮助,请标记给其他人【参考方案2】:如果你真的想用正则表达式做到这一点,你必须使用^
和$
。这样,数字(18 到 65 之间)将是唯一接受的输入(没有其他字符):
^(1[89]|[2-5][0-9]|6[0-5])$
【讨论】:
【参考方案3】:你可以试试
const regex = /^(1[8-9])|([2-5][0-9])|(6[0-5])$/
console.log(regex.test(17)) // false
console.log(regex.test(18)) // true
console.log(regex.test(65)) // true
console.log(regex.test(66)) // false
但是,正如 cmets 中已经说明的那样,正则表达式对于这样做来说是一种过度杀伤力。
您应该使用正则表达式来提取数值,然后使用不同的函数将提取的值与所需的值进行比较。
【讨论】:
这是有效的,但接受超过两位数。【参考方案4】:试试这个:
(^1[8-9]$)|(^[2-5][0-9]$)|(^6[0-5]$)
Here is Demo
【讨论】:
【参考方案5】:很多答案....如果您将来需要其他范围,也许可以查看这个方便的网站? http://gamon.webfactional.com/regexnumericrangegenerator/
\b(1[89]|[2-5][0-9]|6[0-5])\b
【讨论】:
这匹配abc*$^189245%/:
编辑示例以匹配整个单词。【参考方案6】:
虽然根据 AZ_ 评论提及条件很好,但如果您想使用正则表达式,请尝试以下操作。
^1[8-9]$|^[2-5][0-9]$|^6[0-5]$
【讨论】:
11-17 也通过 失败 20、30、40、50 @CinCout,感谢您告诉我,现在更改它。 这匹配1800000
以上是关于正数范围 18-65 的正则表达式是啥?它必须只接受两位数的主要内容,如果未能解决你的问题,请参考以下文章