正则表达式用于测试数字的正负

时间:2019-05-23 18:23:36

标签: javascript regex regex-negation regex-lookarounds regex-group

我正在尝试使用regex.test来查看数字开头是否有'+'或'-'。最好的解决方案是什么? 我已经尝试过了:

var regex = RegExp('^[0-9]*$');
var str1 = +384572985;
console.log(regex.test(str1)); //return true

var str2 = "+384572985";
console.log(regex.test(str2)); //return false

但是我希望他们两个都返回false!

2 个答案:

答案 0 :(得分:2)

我不确定什么是最好的方法,但是我们可以使用类似以下的表达式来做到这一点:

^[+-][0-9]+$

enter image description here

测试

const regex = /^[+-][0-9]+$/gm;
const str = `+384572985
-384572985
++384572985
384572985`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

RegEx

如果不需要此表达式,可以在regex101.com中对其进行修改或更改。

RegEx电路

jex.im可视化正则表达式:

enter image description here

答案 1 :(得分:1)

str1不是字符串。它被强制转换为字符串。由于操作顺序,在对正则表达式进行评估之前,+123的计算结果仅为123。就像运行/3/.test(1+2)