Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 如何为IBAN注册每4个字符插入一个空格?_Javascript_Regex - Fatal编程技术网

Javascript 如何为IBAN注册每4个字符插入一个空格?

Javascript 如何为IBAN注册每4个字符插入一个空格?,javascript,regex,Javascript,Regex,我是JavaScript新手,我想在我的输入文本中添加空间插入,以便注册IBAN帐户 您必须捕获每组4位数字,然后在每组之间留出一个空格 $('input').blur(function () { //Replace each group 4 digits with a group plus a space var reformat = this.value.replace(/(\d{4})/g, function(match){ return mat

我是JavaScript新手,我想在我的输入文本中添加空间插入,以便注册IBAN帐户


您必须捕获每组4位数字,然后在每组之间留出一个空格

  $('input').blur(function () {
  //Replace each group 4 digits  with a group plus a space
        var reformat = this.value.replace(/(\d{4})/g, function(match){
        return match + " ";
        });
        this.value = reformat;
    })
这个在键入时更新元素

 //Keys pressed 0 times
var downed = 0; 
$('#test').keydown(function (g) {
    if(g.code.match("^Digit")){
        downed++;
      console.log(g)
    }

    if(downed == 1){
        var reformat = this.value.replace(/(\d{4}\s*)/g, function(match){
            //Strip spaces
            if(match.match(/\s/)){return match;}
            return match + " ";
    });
    console.log(reformat);
    this.value = reformat; 
    //Start recount
        downed = 0;
    }
});

查看您必须捕获每组4位数字,然后在每组之间留出一个空格

  $('input').blur(function () {
  //Replace each group 4 digits  with a group plus a space
        var reformat = this.value.replace(/(\d{4})/g, function(match){
        return match + " ";
        });
        this.value = reformat;
    })
这个在键入时更新元素

 //Keys pressed 0 times
var downed = 0; 
$('#test').keydown(function (g) {
    if(g.code.match("^Digit")){
        downed++;
      console.log(g)
    }

    if(downed == 1){
        var reformat = this.value.replace(/(\d{4}\s*)/g, function(match){
            //Strip spaces
            if(match.match(/\s/)){return match;}
            return match + " ";
    });
    console.log(reformat);
    this.value = reformat; 
    //Start recount
        downed = 0;
    }
});

使用纯JavaScript查看,我建议:

function space(el, after) {
    // defaults to a space after 4 characters:
    after = after || 4;

    /* removes all characters in the value that aren't a number,
       or in the range from A to Z (uppercase): */
    var v = el.value.replace(/[^\dA-Z]/g, ''),
    /* creating the regular expression, to allow for the 'after' variable
       to be used/changed: */
        reg = new RegExp(".{" + after + "}","g")
    el.value = v.replace(reg, function (a, b, c) {
        return a + ' ';
    });
}

var el = document.getElementById('iban');
el.addEventListener('keyup', function () {
    space(this, 4);
});

有点晚了,我重写了上面的内容来处理字符串,而不是DOM节点:

function space(str, after) {
    if (!str) {
        return false;
    }
    after = after || 4;
    var v = str.replace(/[^\dA-Z]/g, ''),
        reg = new RegExp(".{" + after + "}", "g");
    return v.replace(reg, function (a) {
        return a + ' ';
    });
}

var el = document.getElementById('iban');
el.addEventListener('keyup', function () {
    this.value = space(this.value, 4);
});

参考资料:


    • 使用纯JavaScript,我建议:

      function space(el, after) {
          // defaults to a space after 4 characters:
          after = after || 4;
      
          /* removes all characters in the value that aren't a number,
             or in the range from A to Z (uppercase): */
          var v = el.value.replace(/[^\dA-Z]/g, ''),
          /* creating the regular expression, to allow for the 'after' variable
             to be used/changed: */
              reg = new RegExp(".{" + after + "}","g")
          el.value = v.replace(reg, function (a, b, c) {
              return a + ' ';
          });
      }
      
      var el = document.getElementById('iban');
      el.addEventListener('keyup', function () {
          space(this, 4);
      });
      

      有点晚了,我重写了上面的内容来处理字符串,而不是DOM节点:

      function space(str, after) {
          if (!str) {
              return false;
          }
          after = after || 4;
          var v = str.replace(/[^\dA-Z]/g, ''),
              reg = new RegExp(".{" + after + "}", "g");
          return v.replace(reg, function (a) {
              return a + ' ';
          });
      }
      
      var el = document.getElementById('iban');
      el.addEventListener('keyup', function () {
          this.value = space(this.value, 4);
      });
      

      参考资料:


      现有的答案相对较长,看起来有些过分了。此外,它们不能完全工作(例如,一个问题是您无法编辑以前的字符)

      对于感兴趣的人,根据:

      允许的IBAN字符是数字0到9和26个大写拉丁字母A到Z

      以下是一个与现有答案类似的相对简短的版本:

      document.getElementById('iban').addEventListener('input',function(e){
      e、 target.value=e.target.value.replace(/[^\dA-Z]/g',).replace(/(.{4})/g',$1').trim();
      });
      
      iban
      
      现有的答案相对较长,看起来有些过分了。此外,它们不能完全工作(例如,一个问题是您无法编辑以前的字符)

      对于感兴趣的人,根据:

      允许的IBAN字符是数字0到9和26个大写拉丁字母A到Z

      以下是一个与现有答案类似的相对简短的版本:

      document.getElementById('iban').addEventListener('input',function(e){
      e、 target.value=e.target.value.replace(/[^\dA-Z]/g',).replace(/(.{4})/g',$1').trim();
      });
      
      iban
      
      我需要相同的,但用于BVR/BVR+瑞士付款单。 所以我需要的是从字符串的末尾每隔5个字符添加一个空格

      例如:“52 86571 22001 00000 10520 15992”或有时更短,如“843 14293 10520 15992”

      因此,如果rev=1,那么在添加空格之前和之后反转字符串就是解决方案

      function space(str, stp, rev) {
          if (!str) {
              return false;
          }
          if (rev == 1) {
              str = str.split('').reverse().join('');
          }
          if(stp > 0) {
              var v = str.replace(/[^\dA-Z]/g, ''),
                  reg = new RegExp(".{" + stp + "}", "g");
              str = v.replace(reg, function (a) {
                  return a + ' ';
              });
          }
          if (rev == 1) {
              str = str.split('').reverse().join('');
          }
          return str;
      }
      
      使用:

      编辑:添加了PHP版本

      function space($str=false, $stp=0, $rev= false) {
      
          if(!$str)
              return false;
          
          if($rev)
              return trim(strrev(chunk_split(strrev($str), $stp, ' ')));
          else
              return trim(chunk_split($str, $stp, ' '));
      }
      

      我需要相同的,但BVR/BVR+瑞士付款表。 所以我需要的是从字符串的末尾每隔5个字符添加一个空格

      例如:“52 86571 22001 00000 10520 15992”或有时更短,如“843 14293 10520 15992”

      因此,如果rev=1,那么在添加空格之前和之后反转字符串就是解决方案

      function space(str, stp, rev) {
          if (!str) {
              return false;
          }
          if (rev == 1) {
              str = str.split('').reverse().join('');
          }
          if(stp > 0) {
              var v = str.replace(/[^\dA-Z]/g, ''),
                  reg = new RegExp(".{" + stp + "}", "g");
              str = v.replace(reg, function (a) {
                  return a + ' ';
              });
          }
          if (rev == 1) {
              str = str.split('').reverse().join('');
          }
          return str;
      }
      
      使用:

      编辑:添加了PHP版本

      function space($str=false, $stp=0, $rev= false) {
      
          if(!$str)
              return false;
          
          if($rev)
              return trim(strrev(chunk_split(strrev($str), $stp, ' ')));
          else
              return trim(chunk_split($str, $stp, ' '));
      }
      

      在一根管子里有成千上万的人

      integer = integer.replace(/[^\dA-Z]/g, '').replace(/(.{3})/g, '$1.').trim();
      

      在一根管子里有成千上万的人

      integer = integer.replace(/[^\dA-Z]/g, '').replace(/(.{3})/g, '$1.').trim();
      

      Josh Crozie的代码非常好,但并不完整

      有两个问题

      • 如果插入符号不在末尾,而是在前一个位置,并且用户开始键入,则有时插入符号不会停留在前一个位置
      • 另一个问题是Android 7+设备。这些设备稍晚更新插入符号位置,这意味着在读取插入符号位置之前需要setTimeout()
      下面的代码基于Josh Crozie的代码,现在已经修复了上面提到的两个问题,并且出于可读性目的,代码更加详细:

      var isAndroid=navigator.userAgent.indexOf(“ndroid”)>-1;
      var元素=document.getElementById('iban');
      元素。addEventListener('input',function(){
      if(isAndroid){
      //对于android 7+来说,光标位置的更新有点落后,因此延迟很小。
      设置超时(重新格式化输入字段);
      返回;
      }
      reformatInputField();
      });
      函数reformatInputField(){
      函数格式(值){
      返回值。替换(/[^\dA-Z]/gi',)
      .toUpperCase()
      .替换(/(.{4})/g,'$1')
      .trim();
      }
      函数计数空间(文本){
      变量空格=text.match(/(\s+)/g);
      返回空格?空格。长度:0;
      }
      变量位置=element.selectionEnd;
      var previousValue=element.value;
      element.value=格式(element.value);
      if(位置!==element.value.length){
      var beforeCaret=previousValue.substr(0,位置);
      var countPrevious=countSpaces(beforeCaret);
      var countCurrent=countSpaces(格式(beforeCaret));
      element.selectionEnd=位置+(countCurrent-countPrevious);
      }
      }
      iban
      
      Josh Crozie的代码非常好,但并不完整

      有两个问题

      • 如果插入符号不在末尾,而是在前一个位置,并且用户开始键入,则有时插入符号不会停留在前一个位置
      • 另一个问题是Android 7+设备。这些设备稍晚更新插入符号位置,这意味着在读取插入符号位置之前需要setTimeout()
      下面的代码基于Josh Crozie的代码,现在已经修复了上面提到的两个问题,并且出于可读性目的,代码更加详细:

      var isAndroid=navigator.userAgent.indexOf(“ndroid”)>-1;
      var元素=document.getElementById('iban');
      元素。addEventListener('input',function(){
      if(isAndroid){
      //对于android 7+来说,光标位置的更新有点落后,因此延迟很小。
      设置超时(重新格式化输入字段);
      返回;
      }
      reformatInputField();
      });
      函数reformatInputField(){
      函数格式(值){
      返回值。替换(/[^\dA-Z]/gi',)
      .toUpperCase()