正数范围 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 的正则表达式是啥?它必须只接受两位数的主要内容,如果未能解决你的问题,请参考以下文章

参考 - 这个正则表达式是啥意思?

参考 - 这个正则表达式是啥意思?

正则表达式中“后向断言必须是固定长度”的技术原因是啥?

正则表达式验证邮箱格式是啥?

0 到 10 范围内任何正或负十进制数的正则表达式

关于文本框的正则表达式,只能输入正数,可以有小数点,小数点后面两位。