Javascript 从键盘输入时,在每n个字符后加上破折号

Javascript 从键盘输入时,在每n个字符后加上破折号,javascript,jquery,regex,Javascript,Jquery,Regex,我发现这篇关于在每4个字符后加破折号的教程,我的问题是,如果字符间隔不是像本例中那样恒定,它只在每4个字符后加破折号,如果间隔是3个字符“-”2个字符“-”4个字符“-”3个字符“-”,那么它看起来是这样的123-12-1234-123-123 您可以使用正则表达式拆分它。在本例中,我使用一个表达式来检查间隔为3-2-4-3的非空格 RegExp.exec将返回一个“match”数组,第一个元素包含实际字符串。删除匹配的第一个元素后,可以使用破折号将它们连接起来 $('.creditCardTe

我发现这篇关于在每4个字符后加破折号的教程,我的问题是,如果字符间隔不是像本例中那样恒定,它只在每4个字符后加破折号,如果间隔是
3个字符“-”2个字符“-”4个字符“-”3个字符“-”
,那么它看起来是这样的
123-12-1234-123-123

您可以使用正则表达式拆分它。在本例中,我使用一个表达式来检查间隔为3-2-4-3的非空格

RegExp.exec将返回一个“match”数组,第一个元素包含实际字符串。删除匹配的第一个元素后,可以使用破折号将它们连接起来

$('.creditCardText').keyup(function() {
  var foo = $(this).val().split("-").join(""); // remove hyphens
  if (foo.length > 0) {
    foo = foo.match(new RegExp('.{1,4}', 'g')).join("-");
  }
  $(this).val(foo);
});

可以使用正则表达式拆分它。在本例中,我使用一个表达式来检查间隔为3-2-4-3的非空格

RegExp.exec将返回一个“match”数组,第一个元素包含实际字符串。删除匹配的第一个元素后,可以使用破折号将它们连接起来

$('.creditCardText').keyup(function() {
  var foo = $(this).val().split("-").join(""); // remove hyphens
  if (foo.length > 0) {
    foo = foo.match(new RegExp('.{1,4}', 'g')).join("-");
  }
  $(this).val(foo);
});

根据进一步的评论,op澄清了他们需要一个固定的时间间隔来插入破折号。在这种情况下,有几种方法可以实现它;我认为正则表达式可能是最糟糕的,换句话说,它是一种过度杀伤力和过度复杂化的解决方案

一些更简单的选择是创建一个新的字符数组,并在循环中逐个字符追加,每次到达所需索引时也添加一个破折号。这可能是最容易在事后编写和摸索的,但要详细一点


或者您可以转换为字符数组,并使用“在索引处插入数组”类型的函数,如
splice()
(请参阅或了解一些示例)。

根据进一步的注释,op澄清了插入破折号的时间需要固定的间隔。在这种情况下,有几种方法可以实现它;我认为正则表达式可能是最糟糕的,换句话说,它是一种过度杀伤力和过度复杂化的解决方案

一些更简单的选择是创建一个新的字符数组,并在循环中逐个字符追加,每次到达所需索引时也添加一个破折号。这可能是最容易在事后编写和摸索的,但要详细一点


或者,您可以转换为字符数组,并使用“在索引处插入数组”类型的函数,如
splice()
(有关一些示例,请参见或)。

在这种情况下,只需编写普通代码就可以更方便地解决问题:

var mystring = "123121234123"
var myRegexp = /^([^\s]{3})([^\s]{2})([^\s]{4})([^\s]{3})$/g
var match = myRegexp.exec(mystring);
if (match)
{
    match.shift();
    mystring = match.join("-")
    console.log(mystring)
}
函数格式(输入、格式、sep){
var输出=”;
var-idx=0;
对于(var i=0;i
示例用法:

函数格式(输入、格式、sep){
var输出=”;
var-idx=0;
对于(var i=0;i0){
foo=格式(foo,[3,2,4,3,3],“-”;
}
$(this.val(foo);
});

在这种情况下,只需编写普通代码就可以更方便地解决问题:

var mystring = "123121234123"
var myRegexp = /^([^\s]{3})([^\s]{2})([^\s]{4})([^\s]{3})$/g
var match = myRegexp.exec(mystring);
if (match)
{
    match.shift();
    mystring = match.join("-")
    console.log(mystring)
}
函数格式(输入、格式、sep){
var输出=”;
var-idx=0;
对于(var i=0;i
示例用法:

函数格式(输入、格式、sep){
var输出=”;
var-idx=0;
对于(var i=0;i0){
foo=格式(foo,[3,2,4,3,3],“-”;
}
$(this.val(foo);
});


不相关,但如果你能使用@naveen之类的东西会更好吗?我会检查一下,看看是否可以使用它。它是免费的吗?是的。这是免费的,直到日期。downvoter,请详细说明downvote?您建议如何确定何时使用哪个时间间隔?基于其他数据,如空白或中断,它是常规的吗characters@JonAdams让我重新表述一下,这是固定间隔
123-12-1234-123-122
不相关,但是如果你能使用@naveen之类的东西会更好吗?我会检查一下,看看是否可以使用它。它是免费的吗?是的。这是免费的,直到日期。downvoter,请详细说明downvote?您建议如何确定何时使用哪个时间间隔?有规律吗,基于其他数据,如空白或中断characters@JonAdams让我重新表述一下,这是固定间隔
123-12-1234-123-122
先生,我做了一次编辑,你能检查一下答案是否仍然有效吗?很抱歉,我认为这与输入无关,但我要求的是当我输入第三个字符a时破折号将出现,以此类推。如果您需要这是一个交互式键盘输入验证,我建议您找到一个合适的验证jQuery插件