我需要一个正则表达式,该正则表达式必须与正负十进制值,空字符串('')和负号('-')匹配。由于我需要在处理数字字段更改的函数中使用它,并且为了添加负值,用户首先要添加“-”或删除旧值(“”),因此我需要匹配所有这三个条件。
因此,总而言之,正则表达式应允许:
到目前为止,我拥有的是:
def is_positive(number):
if True:
return True
else:
return False
答案 0 :(得分:1)
在函数返回之前,请使用javascript内置的Number
将字符串转换为数字值。
我还修改了您的正则表达式,使其可以接受.23
和0.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位数字)?
关闭非捕获组并将其设为可选$
字符串结尾。
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个以上的数字)?
关闭组并将其设置为可选$
字符串结尾
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;
}