在JavaScript中使用正则表达式进行十进制检查

13 浏览
0 Comments

在JavaScript中使用正则表达式进行十进制检查

我目前正在 JavaScript 中使用正则表达式检查十进制输入。下面是模拟的测试案例:

HTML:


JavaScript:

function checkKey(event) {
    if(event.which == '13') {     //按下回车键
        var checkVal = $('#checkValue').val().trim();
        if(checkVal.match("(\d{1,7}\.\d{1,2})|(\.\d{1,2})|(0)")) {
            alert("匹配成功!");
        } else {
            alert("未匹配!");
        }
    }
}

假设我输入"123.456",期望返回"未匹配",但实际返回"匹配"。

期望的结果如下:

匹配类型:

.01
1
1.01
0
1234567.89

不匹配类型:

.012
1.098
123.456

总之,输入的值最多可以有9位数,可以有或没有小数点。如果有小数点,则小数点后面只能有2位数,例如"1234567.89"。

这是我第一次接触正则表达式,希望能得到一些建议。

希望能帮助修正上面的正则表达式,谢谢!

编辑

function checkKey(event) {
    if(event.which == '13') {     //按下回车键
        var checkVal = $('#checkValue').val().trim();
        alert(checkVal.match(/^\d{0,7}\.?\d{0,2}|\.\d{0,2}|0$/));
    }
}

同样,我输入了"123.456",但我得到的警告信息是"123.45"...

第二次编辑

function checkKey(event) {
    if(event.which == '13') {     //按下回车键
        var checkVal = $('#checkValue').val().trim();
        alert(checkVal.match(/^\d{0,7}(\.\d{0,2}|\d{0,2})$/g));
    }
}

我将

/^\d{0,7}(\.\d{0,2}|\d{0,2})$/g

改为了

/^\d{0,7}\.?\d{0,2}$/g

,这样更简化了 🙂

它适用于数字,但如果用户仅输入".",是不被接受的。另外,以零作为起始数字也是不被接受的。我需要将其分成两个正则表达式进行检查吗?

0
0 Comments

在JavaScript中使用正则表达式进行十进制检查的问题可能是因为作者认为过度使用正则表达式是一种滥用。作者建议编写一个验证方法来代替。这个方法将文本中的点替换为空字符,并检查文本的长度是否大于9。如果长度大于9或者文本不是全由数字组成,就返回false。然后检查点的位置是否小于输入字符串的长度减2,如果小于,则返回false。最后检查点的数量是否大于1,如果大于1,则返回false,否则返回true。

作者认为这是对正则表达式的滥用。更明智的做法是将字符串分割,并分别检查每个部分,但正如他们所说:“当要求正则表达式时,你将得到正则表达式”。等到你看到我制作的解析浮点数范围的正则表达式构建函数时,你就会发现这是对正则表达式的滥用。

这意味着我应该将这三种情况分成三个if语句进行检查吗?

你可能想阅读《优先阅读易读性》的文章。

0
0 Comments

问题的出现原因:

这篇内容提到了使用正则表达式在JavaScript中进行十进制检查的方法。这可能是因为在某个项目中需要对用户输入的十进制数进行验证,以确保其符合某种规定的格式。正则表达式是一种强大的工具,可以用于检查和匹配字符串,因此可以用来验证用户输入的十进制数是否满足特定的要求。

解决方法:

为了解决这个问题,作者给出了两个正则表达式的示例。第一个示例是:^(?=(?:\D*\d){1,9}\D*$)\d*(?:\.\d{2})?$。这个正则表达式的解释如下:

- ^是一个锚点,断言我们处在字符串的开头。

- (?=(?:\D*\d){1,9}\D*$)是一个前瞻,断言其后是任意数量的非数字字符,紧接着是一个数字,重复一到九次,然后是可选的非数字字符和字符串的结尾(以强制限制为九位数字)。

- \d*匹配零个或多个数字。

- (?:\.\d{2})?可选地匹配一个点,然后是两个数字。

- $是一个锚点,断言我们处在字符串的结尾。

第二个示例是:^\d{0,7}(?:\.\d{2}|\d{0,2})$。这个正则表达式的解释如下:

- \d{0,7}匹配零到七个数字。

- (?:\.\d{2}|\d{0,2})匹配一个点,然后是两个数字,或者匹配零到两个数字。

- $是一个锚点,断言我们处在字符串的结尾。

这两个示例都提供了一种使用正则表达式来检查十进制数的方法,可以根据具体的需求选择其中之一。

这篇内容介绍了在JavaScript中使用正则表达式进行十进制检查的方法。通过使用正则表达式,可以有效地验证用户输入的十进制数是否符合特定的格式要求。作者给出了两个正则表达式示例,供读者选择使用。正则表达式是一种功能强大的工具,在数据验证和字符串匹配方面非常有用。

0
0 Comments

问题的原因是需要使用正则表达式来检查一个十进制数。解决方法是使用以下正则表达式来匹配符合条件的数字:^[0-9]{0,7}(\.[0-9]{1,2}|[0-9]{0,2})$。这个正则表达式首先匹配0到7个数字,然后检查是否有小数点和最多两位数字,或者最多两位数字(最多总共9位数字,包括小数点)。如果要匹配多种小数点,可以使用以下表达式:^[0-9]{0,7}([\.,][0-9]{1,2}|[0-9]{0,2})$,或者使用OR表达式:^[0-9]{0,7}((\.|,)[0-9]{1,2}|[0-9]{0,2})$。需要注意的是,这个正则表达式只会检查可能的小数点之一,但是会匹配所有符合条件的小数点。换句话说,它不关心有不同小数点的数字,只要有一个,并且是包含在表达式中的一个,它就会匹配所有的小数点。然而,对于OP来说,0是一个有效的匹配,他没有提到.0作为一个不可接受的匹配。因此,我认为.0,虽然荒谬,但和0一样好。如果添加一个检查.0的条件,可能会使整个表达式变得更复杂。根据我理解,OP说小数点后面只能有两位数字。但是回顾OP的问题,这一点并不清楚。我们需要等待OP的进一步解释。解释:这个问题的原因是需要使用正则表达式来检查一个十进制数。解决方法是使用特定的正则表达式来匹配符合条件的数字。

0