【问题标题】:Match one of multiple specific values in input field using the pattern attribute使用模式属性匹配输入字段中的多个特定值之一
【发布时间】:2016-03-20 07:23:51
【问题描述】:

我希望用户只输入以下之一:0、1、1.25、1.5、1.75、2、2.25、2.5、2.75、3、4 和 5,并且必须使用模式属性进行验证。我的代码是这样的:

<input class="grade-field" type="text" maxlength="4" pattern="[0-5]+(\.\d*)?" value="0">

现在它只接受 0-5.99 之间的任何数字。我对使用正则表达式进行匹配不是很熟悉,所以我知道我在这里肯定错了。如果我输入 1.34,这是一个有效的输入并将继续。

【问题讨论】:

  • 为什么不使用asch选项的选择? span>

标签: javascript regex html validation


【解决方案1】:

Poul Bak 给出的解决方案是正确的。没有错。

但我试图让它更短。这可能看起来有点复杂,但如果您仔细观察,就会明白为什么我把它缩短了。

正则表达式: ^([0345]|[12](\.([27]?5))?)$

说明:

  • 使用字符类[0345],我们将匹配它们中的任何一个。

  • 让我们分解一下:[12](\.([27]?5))?

    • [12] 在字面上匹配 12

    • (\.([27]?5))? 是带小数部分的数字的可选小数部分。

Regex101 Demo

【讨论】:

    【解决方案2】:

    你可以简单地用“|”或你想要的值像这样:

    ^(0|1|1\.25|1\.5|1\.75|2|2\.25|2\.5|2\.75|3|4|5)$
    

    这应该会给你正确的测试答案。

    编辑:我忘了点必须被转义,试试新的。

    【讨论】:

    • 谢谢老兄,但有个小问题。除了 1.25、1.5、1.75、2.25、2.5 和 2.75 之外,0,1,2,3,4,5 完美运行。
    猜你喜欢
    • 2012-06-24
    • 2014-10-20
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2015-09-19
    • 2015-09-10
    相关资源
    最近更新 更多