Javascript正则表达式正负十进制数

时间:2020-07-08 09:21:58

标签: javascript regex

我需要一个正则表达式,该正则表达式必须与正负十进制值,空字符串('')和负号('-')匹配。由于我需要在处理数字字段更改的函数中使用它,并且为了添加负值,用户首先要添加“-”或删除旧值(“”),因此我需要匹配所有这三个条件。

因此,总而言之,正则表达式应允许:

  • 正负十进制值(也为0)
  • “”(空字符串)
  • “-”(减字符串)

到目前为止,我拥有的是:

def is_positive(number):
    if True:
        return True
    else:
        return False

3 个答案:

答案 0 :(得分:1)

在函数返回之前,请使用javascript内置的Number将字符串转换为数字值。

我还修改了您的正则表达式,使其可以接受.230.2345之类的输入。

function sanitizeInputValue(value) {
  var re = new RegExp('^$|^-?(\\d+)?(\\.?\\d*)?$');
  return value.match(re) === null ? 0 : Number(value);
}

console.log(sanitizeInputValue("-23"));     // -23
console.log(sanitizeInputValue("42.123"));  //  42.123
console.log(sanitizeInputValue("-.34"));    // -0.34
console.log(sanitizeInputValue(""));        //  0
console.log(sanitizeInputValue("-8."));     //  -8
console.log(sanitizeInputValue("-8.4"));     // -8.4

答案 1 :(得分:0)

您可以将数字与小数部分的匹配设置为可选,因此您也只能匹配连字符^$|^-?(?:\d{1,9}(\.\d{1,2})?)?$

由于所有部分都是可选的,因此您可以省略^$,然后所有部分都是可选的。

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

说明

  • ^字符串的开头
  • -?可选的连字符
  • (?:非捕获组
    • \d{1,9}匹配1-9次数字
    • (?:\.\d{1,2})?可以选择匹配点和1-2位数字
  • )?关闭非捕获组并将其设为可选
  • $字符串结尾。

Regex demo

var re = new RegExp("^-?(?:\\d{1,9}(?:\\.\\d{1,2})?)?$");

[
  "",
  "-",
  "1",
  "1.2",
  "test",
  "1234567890",
  "1.123",
  "-2",
  "-2.6"
].forEach(s => console.log(s + " --> " + re.test(s)));

修改

由于您还想匹配-8.并且不想限制位数,因此可以使用:

^-?(?:\d+\.?\d*)?$

说明

  • ^字符串的开头
  • -?可选-
  • (?:非捕获组
    • \d+\.?\d*匹配1个以上的数字,可选的点和0个以上的数字
  • )?关闭组并将其设置为可选
  • $字符串结尾

Regex demo

var re = new RegExp("^-?(?:\\d+\\.?\\d*)?$");
[
  "-8.",
  "",
  "-",
  "1",
  "1.2",
  "test",
  "1234567890",
  "1.123",
  "-2",
  "-2.6"
].forEach(s =>
  console.log(s + " --> " + re.test(s))
);

答案 2 :(得分:0)

function sanitizeInputValue(value) {
  var re = /^$|\-?[0-9]\d*(\.\d*)?|-/;
  return value.match(re) ? value : 0;
}
相关问题