【问题标题】:How can I insert a character after every 2 characters?如何在每 2 个字符后插入一个字符?
【发布时间】:2017-08-24 14:49:09
【问题描述】:

我想在每两个字符后插入一个斜杠,但只针对前两个实例。以下正则表达式在每次出现后插入。有谁知道如何将其限制为两次?金额将由用户通过输入元素输入。因此,如果用户输入30032017,它将类似于以下内容。

function insertSlash(val) {
    return val.match(new RegExp('.{1,2}', 'g')).join("/");
}

insertSlash(input);

所以对于第一个字符,用户将输入3。在下一个输入中,它将是0。然后应该插入一个斜杠。

这应该返回30/03/2017

【问题讨论】:

  • 你会用jquery吗?
  • 有很多输入掩码可以使用,不需要重新发明..
  • google maskedInput.js
  • @indubitablee 不是真的。我正在使用反应,它与这个问题有关 - stackoverflow.com/questions/43119701/…

标签: javascript regex


【解决方案1】:

有几种方法可以做到这一点,你可以使用专门为这种类型的字符串格式化的正则表达式

function insertSlash(val) {
  return val.replace(/^(\d{2})(\d{2})/, '$1/$2/');
}

console.log(insertSlash('30032017'));

或者您可以使用简单的替换功能来跟踪替换计数

function insertSlash(val) {
  var count = 2;
  var i = 0;
  return val.replace(/(\d{2})/g, function(match, capture) {
    return (i++ < count) ? capture + '/' : capture;
  });
}

console.log(insertSlash('30032017'));

编辑

您似乎已经编辑了您的问题,以包括在用户键入时发生这种情况的需要。有一些考虑插入符号位置、占位符信息的掩码插件,可能值得您花时间检查其中一些。这是one that I found,它有一个 react JS 组件。我不能保证,我从未使用过它,但这是一个值得一看的想法。

【讨论】:

    【解决方案2】:

    忽略它可能不匹配,

    "30032017".match(new RegExp("(..)(..)(....)")).slice(1).join("/")
    

    match 返回的值是一个匹配组数组。第一个元素将具有整个匹配的字符串,因此需要将其切出以便我们可以加入。

    【讨论】:

      【解决方案3】:

      知道具体的字符位置后对字符串进行切片会更容易:

      return val.slice(0, 2) + "/" + val.slice(2, 4) + "/" + val.slice(4)
      

      【讨论】:

      • 有一件事我没有提出问题,因为它与一个更大的问题有关。通过用户通过输入元素输入输入,日期实际上是动态的。 stackoverflow.com/questions/43119701/…
      • 那你怎么知道在哪里插入字符呢?您的问题是“每 2 个字符”。
      • 每 2 个字符,前 2 个实例。你知道我的意思还是应该更清楚?
      • 这完全是一个不同的问题。我会实现一个输入掩码来查找库:stackoverflow.com/questions/12578507/…
      【解决方案4】:
      function insertSlash(val) {
          return val.substr(0,2)+"/"+val.substr(2,2)+"/"+val.substr(4,4)
      }
      
      insertSlash('30032017');
      

      【讨论】:

        【解决方案5】:

        如果您想将日期字符串视为实际日期,您可以执行以下操作:

        const dateString = "30032017"
        const date = new Date(dateString.slice(4), dateString.slice(3,4), dateString.slice(0,2))
        
        const formattedDateString = date.getUTCFullYear() +"/"+ date.getUTCMonth() +"/"+ date.getUTCDate()
        
        console.log(formattedDateString)

        如果您愿意,这将允许您进行任何中间日期操作(加/减天/月/年)。

        【讨论】:

          猜你喜欢
          • 2011-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-13
          • 1970-01-01
          相关资源
          最近更新 更多