javascript - 正则表达式接受格式为 00.00 的数字

标签 javascript html regex typescript

在我的 Angular 应用程序中,我尝试在输入字段上设置验证,例如

它应该只接受 2 位数字或点后和点前都有 2 位数字的 float

示例

接受值

3、 33、 33.3, 33.33

最大值可以是 99.99

不接受

333 33.333 3.333 333.33

目前我正在使用

pattern="[+]?((\d{1,2})+(?:[\.][0-9]{0,2})?|\.[0-9]{0,2})$"

它验证点后的两位数,但无法验证点前的两位数,因为它接受 333.33(这是错误的)

我也尝试过

pattern="[+]?(([0-9])+(?:[\.][0-9]{0,2})?|\.[0-9]{0,2})$"

但是同样的事情发生了,它不会验证点之前的两位数字

最佳答案

此模式(\d{1,2})+将匹配 1 - 2 位数字并重复一次或多次。

类似 \.[0-9]{0,2} 的模式也将只匹配一个点,因为数字将匹配 0 - 2 次。

您可以使用 anchor 来断言开始 ^和结束$字符串的。将 1 或 2 位数字与匹配点和 1 或 2 位数字的可选部分相匹配:

^\d{1,2}(?:\.\d{1,2})?$

Regex demo

说明

  • ^断言字符串的开头
  • \d{1,2}匹配数字 1 或 2 次
  • (?: Non capturing团体
    • \.\d{1,2}按字面意思匹配一个点和 1 或 2 位数字
  • )?关闭非捕获组并将其设为可选
  • $断言字符串结尾

如果您想在开头匹配可选的加号,则正则表达式的开头可以是 ^\+?

let pattern = /^\d{1,2}(?:\.\d{1,2})?$/;
let strs = [
  "99",
  "3",
  "33",
  "33.3",
  "33.33",
  "333",
  "33.333",
  "3.333",
  "333.33"
];

strs.forEach((s) => {
  console.log(s + " ==> " + pattern.test(s));
});

关于javascript - 正则表达式接受格式为 00.00 的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52810865/

相关文章:

java - REGEX 匹配多个条件

javascript - 为什么新版本的 jQuery 不能使用这个递归?

javascript - Ajax 深度链接是否可以在链接中不添加哈希 ('#' )

html - 在悬停时更新跨度颜色

html - 覆盖 Bootstrap CSS

c++ - 正则表达式模式的反向应用程序使用

Javascript 拆分字符串

javascript - Firefox插件中的内容脚本和跨域请求

javascript - 比较两个数组并通过对象 id javascript 删除对象

jquery - 当它们被设置为 0 时图像有填充/边距