在我的 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})?$
说明
-
^
断言字符串的开头 -
\d{1,2}
匹配数字 1 或 2 次li> -
(?:
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/