【问题标题】:Adding a space after every 4 numbers in an input field in react在反应的输入字段中每4个数字后添加一个空格
【发布时间】:2019-12-11 14:59:07
【问题描述】:

我正在尝试在输入字段中每 4 个数字后添加一个空格。

这是我的代码:

    credit: function(e) {
        const val = e.target.value;
        const valArray = val.split(' ').join('').split('');
        if(isNaN(valArray.join('')))
            return;
        if(valArray.length === 17)
            return
        if(valArray.length % 4 === 0) {
            this.setState({ number: e.target.value + "  " });
        }else{
            this.setState({ number: e.target.value})
        }
  },

规则如下:用户只能写numbers,长度应为 16,并在每 4 个数字后添加空格。

问题是:

1:在数字的末尾有一个额外的空格,在最后一个数字之后添加

2:我不能使用backspace删除元素(推回空格后会在数字前面添加空格)

Fiddle

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

这是一个简约的例子:https://jsfiddle.net/unah2qzf/

这里的关键是设置onchange方法

onChange(e) {
  var val = e.target.value;
  this.setState({
    number: val.replace(/\W/gi, '').replace(/(.{4})/g, '$1 ')
  });
}

我相信你可以从这里弄清楚如何限制数字

【讨论】:

    【解决方案2】:

    你需要检查每一项与上一项,看是否有空格。

    var val = e.target.value;
        const valArray = val.split(' ').join('').split('');
        var valSpace = val.split("")
    
        // to work with backspace
        if(valSpace[valSpace.length-1] == ' '){
            var valSpaceN = valSpace.slice(0, -2)
            val = valSpaceN.join("")
            this.setState({ number:val });
            return;
        }
    
        if(isNaN(valArray.join('')))
            return;
        if(valArray.length === 17)
            return
        if(valArray.length % 4 === 0 && valArray.length <= 15) {
            this.setState({ number: e.target.value + "  " });
        }else{
    
            this.setState({ number: e.target.value})
        }
    

    Working Fiddle

    【讨论】:

      【解决方案3】:

      稍后谢谢我:P

      prev:0,
          getInitialState: function() {
          return {number: ''};
        },
          credit: function(e) {
               const val = e.target.value;
              const valArray = val.split(' ').join('').split('');
              console.log(valArray)
              if(isNaN(valArray.join('')))
                  return;
              if(valArray.length === 17)
                  return
              if(valArray.length % 4 === 0 && this.prev < valArray.length) {
                  this.setState({ number: e.target.value + "  " });
              }else{
              console.log()
                  this.setState({ number: e.target.value})
              }
              this.prev = valArray.length
        },
      

      【讨论】:

      • 我已经在你的小提琴中测试过了,它有效。只需将上面的代码复制粘贴到您的...现在您可以按退格键
      猜你喜欢
      • 2015-07-28
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 2021-01-29
      • 1970-01-01
      相关资源
      最近更新 更多