【问题标题】:how to write javascript regular expression that accept number range between 8 to 15 integer with decimal number also?如何编写 javascript 正则表达式,它也接受 8 到 15 个整数和十进制数之间的数字范围?
【发布时间】:2019-10-07 11:52:29
【问题描述】:

我想让 javascript 正则表达式只匹配 8 到 15 之间的数字(不是负值)。正则表达式也应该接受小数点,如 8.7 或 9.5 等直到 15。

/^0*([89]|1[0-5])$/

我已经尝试过上面的正则表达式,但它不允许小数点。 谁能帮我制作 javascript 正则表达式?

【问题讨论】:

  • 为什么你想用正则表达式来做这个?这是可能的,但它绝对是适合这项工作的错误工具。它基本上涉及列出每个可能的排列。而如果你只是把它当作一个数字,你可以做类似num >= 8 && num <= 15
  • @VLAZ:你假设他们的输入是一个数字,这可能是也可能不是。例如,它可以是某种代码,因此11.5 有效,但11.534982347923 无效。 8 < n < 15 在这里不起作用。
  • OP:只需在末尾添加(\. that thing)? $
  • @georg 这是可能的,但我已经看到足够多的正则表达式在不应该使用的情况下使用。因此问题是 - 为什么是正则表达式。
  • 抱歉,您的表达方式不太正确,至少根据您的定义,因为它允许大于 15 的数字(例如“15.5”有效)但也不允许任何没有小数点的内容(“9 “失败)。这加强了@VLAZ 的观点——这种解释并不是正则表达式的真正设计目的。更好的模式是重新识别一个数字,解析它,然后将范围测试为一个数字。要修复您的正则表达式,您需要将小数设为可选,并为“15”和“15.0”添加一个特定的例外,而不是“15.x”,其中 x>0。

标签: javascript


【解决方案1】:

您可以使用以下内容:

/^0*(?:[89]|1[0-5])(?:\.\d)?$/

但这将允许15.99999999,因为整数部分 (15) 是允许的。要限制它,您必须使用不同的大小写,例如:

/^0*(?:(?:[89]|1[0-4])(?:\.\d)?|15(?:\.0+)?)$/

Inspect on regex101.com

但我不得不提一下,使用正则表达式验证数字并不是一个好主意。

以下内容更高效,更符合语义:

const number= +input
if (8<=number && number<=15){
  //Valid number
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多