Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式,最多只能匹配11位数字、一个逗号和后面的2位数字_Javascript_Jquery_Regex - Fatal编程技术网

Javascript正则表达式,最多只能匹配11位数字、一个逗号和后面的2位数字

Javascript正则表达式,最多只能匹配11位数字、一个逗号和后面的2位数字,javascript,jquery,regex,Javascript,Jquery,Regex,我有一个文本框,其中最多只允许11位数字,一个可选的逗号,后面还有两位数字。将该键按入文本框时,不应渲染任何其他内容: $('#txt').keypress(function (e) { var code = e.which; var key = String.fromCharCode(code); // REGEX TO AVOID CHARS & A DOT (.) var pattern = /[a-zA-Z]|\./g; var isMatch = patte

我有一个文本框,其中最多只允许11位数字,一个可选的逗号,后面还有两位数字。将该键按入文本框时,不应渲染任何其他内容:

$('#txt').keypress(function (e) {
  var code = e.which;
  var key = String.fromCharCode(code);
  // REGEX TO AVOID CHARS & A DOT (.)
  var pattern = /[a-zA-Z]|\./g;
  var isMatch = pattern.test(key);
  if (isMatch) {
    // DO NOT RENDER CHARS & dot
    e.preventDefault();
  }
});
当按下无效键(如字符或点)时,上述代码起作用,但不能确保只有一个逗号和两个数字

这必须匹配:

12314
123123,44
这不得:

12313,6666
这是一个演示

更新:
必须避免使用除数字和逗号以外的任何数字,因此我建议的正则表达式无效,因为它只防止点(.)。

regex
将匹配任何包含1到11个数字的字符串,可以选择后跟一个
和另外两个数字:
^[0-9]{1,11}(,[0-9]{2})$

说明:

^             # Match the start of the string
[0-9]{1,11}   # Followed by a maximum of 11 digits
(,[0-9]{2})?  # Optionally followed by a comma and 2 more digits 
$             # Followed by the end of the string

查看它的实际操作。

regex
将匹配任何包含1到11个数字的字符串(可选后跟
和另外两个数字):
^[0-9]{1,11}(,[0-9]{2})?$

说明:

^             # Match the start of the string
[0-9]{1,11}   # Followed by a maximum of 11 digits
(,[0-9]{2})?  # Optionally followed by a comma and 2 more digits 
$             # Followed by the end of the string

查看实际操作。

您应该测试完整的字符串,而不仅仅是当前字母

$('#txt').keypress(function (e) {
    var key = String.fromCharCode(e.which);
    var pattern=/^[0-9]{1,11}(,[0-9]{0,2})?$/;

    // test this
    var txt = $(this).val() + key;

    if (!pattern.test(txt)) {
        e.preventDefault();
    }
});


您应该测试完整的字符串,而不仅仅是当前字母

$('#txt').keypress(function (e) {
    var key = String.fromCharCode(e.which);
    var pattern=/^[0-9]{1,11}(,[0-9]{0,2})?$/;

    // test this
    var txt = $(this).val() + key;

    if (!pattern.test(txt)) {
        e.preventDefault();
    }
});


逗号不匹配,我可以输入11位以上的数字。请不要,我想要一个javascript正则表达式,而不是ruby正则表达式。
regex
符合您的标准,而不是
javascript
的家伙,所以不确定在这种情况下有什么问题。Ruby与此无关,它只是一个演示站点。这只是
ERE
@senyortoni它实际上是匹配的,但是一个在构建时匹配字符串的正则表达式和一个匹配最终字符串的正则表达式是两件不同的事情。它将匹配
11,22
,但不匹配
11,
,因此
被阻止。这个正则表达式在javascript和ruby中是相同的@senyortoni-您建议
123,
是有效的输入,因为您在键入时进行验证。顺便说一句:在键入块键时进行验证是一个非常糟糕的选择-用户仍然可以粘贴文本、拖动文本、删除部分文本等。此外-您的代码非常错误,您在键上使用了模式-每一步使用一个字符-而不是整个文本。逗号不匹配,我可以输入超过11位数字。请不要,我想要一个javascript正则表达式,而不是ruby正则表达式。
regex
符合您的标准,而不是
javascript
的家伙,所以不确定在这种情况下有什么问题。Ruby与此无关,它只是一个演示站点。这只是
ERE
@senyortoni它实际上是匹配的,但是一个在构建时匹配字符串的正则表达式和一个匹配最终字符串的正则表达式是两件不同的事情。它将匹配
11,22
,但不匹配
11,
,因此
被阻止。这个正则表达式在javascript和ruby中是相同的@senyortoni-您建议
123,
是有效的输入,因为您在键入时进行验证。顺便说一句:在键入块键时进行验证是一个非常糟糕的选择-用户仍然可以粘贴文本、拖动文本、删除部分文本等。此外,您的代码非常错误,您在键上使用模式-每一步使用一个字符-而不是整个文本。此外,我可以将此代码放在函数上,并在客户端单击时调用它。这样我就可以防止复制粘贴@Koby进一步说。此外,我可以将此代码放在函数上,并在客户端单击时调用它。这样我就可以防止复制粘贴@Koby进一步向下。