正则表达式匹配最多x个数字,其中x个数字,最多y可以在小数点后

时间:2017-06-30 19:25:38

标签: regex

我目前正在编写一个验证器,我需要检查浮动的格式。我的代码以(x,y)格式读取,其中x是float中可能的总数,y是x之后可以在小数点之后的最大数字。如果以前已经回答过这个问题,我会道歉,但我找不到类似的东西。

例如,给定格式为(5,3):

有效值

webEngine.setUserAgent("foo\nAuthorization: Basic YourBase64EncodedCredentials");

无效的值

55555
555.33
55.333
5555.3
.333

这是我第一次使用正则表达式,所以如果你们有任何你推荐的教程,请发送给我!

2 个答案:

答案 0 :(得分:3)

您可以使用前瞻来确保这两种情况,例如

^(?=(?:\.?\d){1,5}$)\d*(?:\.\d{1,3})?$
  • ^匹配字符串的开头
  • (?=(?:\.?\d){1,5}$)检查字符串末尾是否存在1到5位数字 - 不关心正确的点数
  • \d*匹配任意位数
  • (?:\.\d{1,3})?最多匹配3位小数
  • $确保字符串结束

请参阅https://regex101.com/r/lrP56w/1

答案 1 :(得分:1)

假设JS你可以尝试

function validate(value, total, dec) {
  let totalRegex = new RegExp(`\\d{0,${total}}$`);
  let decimalRegex = new RegExp(`\\.\\d{0,${dec}}$`);
  return totalRegex.test(value.replace(".","")) && (!(/\./.test(value)) || decimalRegex.test(value));
}

console.log(validate("555.55", 5, 2));
console.log(validate("55.555", 5, 2));
console.log(validate("5.5", 5, 2));
console.log(validate("55555", 5, 2));
console.log(validate("5.5555", 5, 2));