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

在javascript中使用正则表达式进行十进制检查,javascript,jquery,regex,Javascript,Jquery,Regex,我目前正在使用正则表达式检查JavaScript中的十进制输入。以下是模拟测试用例: HTML: 假设我输入“123.456”将返回“不匹配!”,但它返回“匹配!” 预期的结果将是: 匹配类型: .01 1 1.01 0 1234567.89 .012 1.098 123.456 不匹配类型: .01 1 1.01 0 1234567.89 .012 1.098 123.456 总之,输入值最多应为9位,带或不带小数。和带小数的id,它只占2位,如“1234567.89” 这是我第一次使

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

HTML:

假设我输入“123.456”将返回“不匹配!”,但它返回“匹配!”

预期的结果将是:

匹配类型:

.01
1
1.01
0
1234567.89
.012
1.098
123.456
不匹配类型:

.01
1
1.01
0
1234567.89
.012
1.098
123.456
总之,输入值最多应为9位,带或不带小数。和带小数的id,它只占2位,如“1234567.89”

这是我第一次使用正则表达式,所以有什么建议吗

帮助修复上面的正则表达式的任何帮助都将非常有用:)

已编辑

function checkKey(event) {
    if(event.which == '13') {     //Enter is pressed
        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') {     //Enter is pressed
        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*\d){1,9}\D*$)\d*(?:\.\d{2})?$
在中,查看哪些匹配,哪些失败

解释

  • ^
    锚定声明我们位于字符串的开头
  • lookahead
    (?=(?:\D*\D){1,9}\D*$)
    断言后面是任意数量的非数字,后跟一个数字,一到九次,然后是可选的非数字和字符串结尾(强制执行9位限制)
  • \d*
    匹配可选数字
  • (?:\。\d{2})
    可以选择匹配一个句点,然后匹配两位数字
  • $
    锚点断言我们在字符串的末尾
选项2

\d{0,7}
的灵感来自@IvyLynx的
^[0-9]{0,7}(\[0-9]{1,2}{124;[0-9]{0,2})$
,根据我的理解,这不符合点后有两位数字的要求,尽管我可能误解了:

^\d{0,7}(?:\.\d{2}|\d{0,2})$
请参阅。

使用此正则表达式:

^(?=(?:\D*\d){1,9}\D*$)\d*(?:\.\d{2})?$
在中,查看哪些匹配,哪些失败

解释

  • ^
    锚定声明我们位于字符串的开头
  • lookahead
    (?=(?:\D*\D){1,9}\D*$)
    断言后面是任意数量的非数字,后跟一个数字,一到九次,然后是可选的非数字和字符串结尾(强制执行9位限制)
  • \d*
    匹配可选数字
  • (?:\。\d{2})
    可以选择匹配一个句点,然后匹配两位数字
  • $
    锚点断言我们在字符串的末尾
选项2

\d{0,7}
的灵感来自@IvyLynx的
^[0-9]{0,7}(\[0-9]{1,2}{124;[0-9]{0,2})$
,根据我的理解,这不符合点后有两位数字的要求,尽管我可能误解了:

^\d{0,7}(?:\.\d{2}|\d{0,2})$
请参阅。

在这里

^[0-9]{0,7}(\[0-9]{1,2}}[0-9]{0,2})$

它匹配数字,0到7次(9-2),然后查看是否有一个小数点,最多2个数字,或者最多两个以上的数字(最多9个数字,小数点与否)

编辑-对于多种小数点,表达式为:

^[0-9]{0,7}([\,][0-9]{1,2}}[0-9]{0,2})$

尽管也可以使用
表达式:

^[0-9]{0,7}(\.|,)[0-9]{1,2}{0,2})$

请记住,这将检查其中一个可能的小数点,但它也将匹配其中任何一个。换句话说,它不在乎你是否有不同小数点的数字,它将匹配所有的数字,不管它们有哪个符号,只要它们有一个,并且是一个封闭的符号。

在这里

^[0-9]{0,7}(\[0-9]{1,2}}[0-9]{0,2})$

它匹配数字,0到7次(9-2),然后查看是否有一个小数点,最多2个数字,或者最多两个以上的数字(最多9个数字,小数点与否)

编辑-对于多种小数点,表达式为:

^[0-9]{0,7}([\,][0-9]{1,2}}[0-9]{0,2})$

尽管也可以使用
表达式:

^[0-9]{0,7}(\.|,)[0-9]{1,2}{0,2})$


请记住,这将检查其中一个可能的小数点,但它也将匹配其中任何一个。换句话说,它不在乎是否有不同小数点的数字,它将匹配所有的数字,不管它们有哪个符号,只要它们有一个,并且它是一个封闭的符号。

我觉得这是对regexp的滥用。我建议改为编写验证方法(伪代码):

验证(输入):
text=输入。替换('.','')
如果(text.length>9)返回false;
如果(!/^\\d+$/.matches(text))返回false;
pos=输入.索引('.'))
if(pos1)返回false;
返回true;
}

每行检查一个假设。这样,代码很容易理解和扩展。

我觉得这是对regexp的滥用。我建议改为编写验证方法(伪代码):

验证(输入):
text=输入。替换('.','')
如果(text.length>9)返回false;
如果(!/^\\d+$/.matches(text))返回false;
pos=输入.索引('.'))
if(pos1)返回false;
返回true;
}

每行检查一个假设。这样,代码就很容易理解和扩展。

/(\d{0,7}(?:\.\d{0,2})/
谢谢大家,昨天互联网瘫痪了,所以我昨天就到此为止。将尝试给出的代码:)
/(\d{0,7}(?:\.\d{0,2})/
检查谢谢伙计们,昨天互联网断了,所以我昨天就到此为止。将尝试给出的代码:)好主意,但您需要调整,如
^[0-9]{0,7}(\.[0-