【问题标题】:JavaScript String split method delimiterJavaScript 字符串拆分方法分隔符
【发布时间】:2012-03-22 21:40:31
【问题描述】:

对于一项作业,我尝试将电话号码按以下格式拆分:(555) 555-5555 为 2 部分。第一个是应显示“555”的区号,第二个是应显示“555-5555”的剩余号码。

我已经设法得到几乎完美显示的答案,除了区号显示为“(555)”而不是“555”,这是我需要的。

如何让分隔符查找括号之间的数字?

这是我当前的代码:

function splitButtonPressed()
{
   var inputString = document.getElementById( "inputField" ).value; //Input field for numbers
   var tokens1 = inputString.split( " " ); 


   document.getElementById("areaOutput").value = tokens1[0]; 

   document.getElementById("numberOutput").value = tokens1[1];
}

编辑:我已经开始工作了,谢谢大家的帮助。

【问题讨论】:

  • string.substr(1, string.length -1)

标签: javascript split delimiter


【解决方案1】:

如果您不必使用.split() 来解决此问题,并且您希望为区号允许一堆不同的分隔符,我可能会使用正则表达式来做到这一点:

var phoneStr = "(123) 456-7890";
var match = phoneStr.match(/\s*\(?(\d+)[)\-\s]\s*(\d+)[\s*\-](\d+)/);

// areaCode = match[1];
// prefix = match[2];
// num = match[3];​

这是一个测试应用程序,显示它可以在一堆不同的电话号码上运行:http://jsfiddle.net/jfriend00/L87rE/

下面是正则表达式的工作原理:

Any amount of whitespace  \s*
An optional left paren    \(?
A series of digits (captured for match[1])   (\d+)
Any one of several delimiters a right paren, a dash or whitespace  [)\-\s]
Any amount of whitespace   \s*
A series of digits (captured for match[2])   (\d+)
Whitespace or dash as a delimiter   [\s*\-]
A series of digits (captured for match[3])   (\d+)/

【讨论】:

  • 我必须使用 .split 来完成这项任务。这是要求的一部分。无论如何谢谢
【解决方案2】:

改变

document.getElementById("areaOutput").value = tokens1[0];

document.getElementById("areaOutput").value = tokens1[0].substr(1, 3);

上述代码的作用是从tokens1[0] 中获取一个子字符串,从字符串中的第一个字符开始,然后获取三个字符(5、5 和5)。

【讨论】:

  • 我会在 4 分钟内接受答案(现在不让我这样做)。另外,我不能投票。没有足够的代表。
【解决方案3】:

这是一个使用单个 .split() 的方法,它适用于如下灵活的电话号码格式:

"(123) 456-7890",
"123-456-7890",
" (123)456-7890",
" 123 456 7890"

var phoneStr = "(123) 456-7890";
// precondition the phone number by removing parens and trimming extra whitespace
var str = phoneStr.replace(/[\(\)]/g, " ").replace(/^\s*|\s*$/g, "");
// split on either a dash or whitespace
var parts = str.split(/-|\s+/);
// areacode == parts[0]
// prefix == parts[1]
// num == parts[2]

这里的测试用例:http://jsfiddle.net/jfriend00/UUgXM/

为了使.split() 操作生成具有不同格式的一致结果,它使用一对.replace() 操作在.split() 之前对输入进行预处理。

这使用带有.split() 的正则表达式,因此单个拆分可以拆分多个。

【讨论】:

  • 不像纯正则表达式的解决方案,我实际上可以在这里阅读代码。
【解决方案4】:

我建议使用match():

document.getElementById("areaOutput").value = tokens1[0].match(/\d+/);

【讨论】:

  • 虽然这是一个优雅的解决方案,但在这种情况下,OP 不需要使用正则表达式,因为他的输入将是一个静态数字。例如。数字的位置永远不会改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 2019-09-19
  • 1970-01-01
  • 2018-01-06
相关资源
最近更新 更多