繁体   English   中英

正则表达式模式整数、整数或浮点数

[英]Regex for pattern integer,integer or float

我想使用正则表达式验证文本框中的条目。 图案应该是

integer, integer or float

所以有效的条目可以是

1234, 1234
123, 123.45

无效条目将是

abd, 123
123, abc
abc, abc

到目前为止我已经尝试过

var entry = "123,123.4" 
var patt = new RegExp("^[0-9]+,(?:[\d+(\.\d+]+,?){0,1}$");
res = patt.test(entry);  

但它返回false,虽然它应该返回true

似乎您混淆了正则表达式的第二部分。 ^\\d+,\\s*\\d+(?:\\.\\d+)?$应该是你需要的。

这是一个Regex101示例。

  • \\d+匹配一位或多位数字(整数)
  • ,\\s * 匹配逗号,可选后跟空格
  • \\d+(?:\\.\\d+)? 匹配一位或多位数字,可选后跟一个点和一位或多位数字(整数或浮点数)

注1:这不会匹配负数。 如果需要,您可以将正则表达式调整为^-?\\d+,\\s*-?\\d+(?:\\.\\d+)?$

注意2:这不会匹配.1作为浮点数,这可能是一个有效的浮点数。 如果需要,您可以将正则表达式调整为^\\d+,\\s*(?:\\d+|\\d*\\.\\d+)$

第一个用“,”分割字符串

var entry = "123,123.4";
var entryArray = entry.split(',');

然后只需使用我从链接中获得的以下函数检查 entryArray 项目

function isFloat(n) {
    return n === +n && n !== (n|0);
}

function isInteger(n) {
    return n === +n && n === (n|0);
}

这是完整的食谱

function isFloat(n) {
    return n === +n && n !== (n|0);
}

function isInteger(n) {
    return n === +n && n === (n|0);
}

function isValidInput(input){
    if (!input) {return false};
    var inputArray = input.split(',');
    inputArray = inputArray.map(function(item){
        return item.trim();
    })
    inputArray = inputArray.filter(function(n){
        var number = parseFloat(n);
        return number && (isInteger(parseFloat(n)) || isFloat(parseFloat(n)) )
    })
    return (inputArray.length === 2)
}
isValidInput("55,55.44");

用这个替换你的regExp:

var reg = new RegExp("^[0-9]+,[0-9]+.?[0-9]*");

我想这就是你想要的。

接受逗号后的空格:

var reg = new RegExp("^[0-9]+, [0-9]+.?[0-9]*");

对于 1a 的情况,最后需要添加 $

^\d+,\s?\d+\.?\d*$

将有效于

1234, 1234
123, 123.45

和无效到

abd, 123
123, abc
abc, abc

试试这个:

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

652.16 有效

.12 无效

511.22 有效

1.23 有效

12.3 有效

12.34 有效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM