首页 > 解决方案 > 正则表达式:如何限制字母数字字段中的最大整数数

问题描述

我的指示是用户可以在字段中输入所有字符,除了这些:

~`!@#$%^&*()_+={}[]|\;"',<>?

最大长度为 60。

字符串中的整数不得超过 10。

例如,如果用户粘贴到输入中:

INV-123-RT-123456789-TR-123

然后正则表达式应该输出:

INV-123-RT-1234567-TR-

这是我的代码。我坚持从字符串末尾删除多余的整数。

 $('.isInvoiceNumber').on("input", function(e) {

  var pos = this.selectionStart;

  var str = $(this).val().replace(/[\~\`\!\@\#\$\%\^\&\*\(\)_\+\=\{\}\[\]\|\\\;\"\'\,\<\>\?]/g, '').replace(/\.{2,}/g, '.'); 

  var digits = str.replace(/[^0-9]/g,"").length;
  if ( digits>10 ) {
    // ??
  }

  var len = str.length;
  $(this).val(str);
  this.selectionEnd = pos - ( len-str.length );
});

--> 这里是Codepen让它变得简单: https ://codepen.io/btn-ninja/pen/vJrXbX

谢谢!

标签: javascriptjquery

解决方案


像这样:

 $('.isInvoiceNumber').on("input", function(e) {

  var pos = this.selectionStart;

  var str = $(this).val().replace(/[\~\`\!\@\#\$\%\^\&\*\(\)_\+\=\{\}\[\]\|\\\;\"\'\,\<\>\?]/g, '').replace(/\.{2,}/g, '.'); 

  var digits = str.replace(/[^0-9]/g,"").length;
  if ( digits>10 ) {
        str = str.substring(0, 10);
  }

  var len = str.length;
  $(this).val(str);
  this.selectionEnd = pos - ( len-str.length );
});

推荐阅读