繁体   English   中英

重新格式化字符串-Javascript

[英]Reformatting Strings - Javascript

我已获得一项必须重新格式化JavaScript中错误的电话号码(即字符串)的任务。 正确的输出必须是:123-456-789或123-456-789-11(取决于字符串中有多少个字符)?

我有基本的Java背景,并且仍在习惯javascript的工作方式...

示例案例:

00-44 48 5555 8361
0 - 22 1985--324
555372654

示例案例应为:

004-448-555-583-61
022-198-53-24
555-372-654

该代码最终将忽略破折号和空格,以便可以生成正确的输出

这是我到目前为止所拥有的:

S = S.replace("", "");

for(var i = 0; i < n; i++) {
    var after = S.replace(/(\d{3})(?=\d)/g, '$1-');
    console.log(after);
} 

干杯

  1. 您在if块中使用了赋值运算符(=)而不是相等运算符(==)。

  2. 如您的代码所示,“ n”是字符串的长度。 因此n.replace()将不起作用。

您可以使用正则表达式来匹配三位数的组。

 var inputs = ['00-44 48 5555 8361', '0 - 22 1985--324', '555372654', '123456798', '12345678911', '', '1']; inputs.forEach(function(input) { var strippedInput = input.replace(/[\\s-]/g, ''); var formattedInput = strippedInput.replace(/(\\d{3})(?=\\d)/g, '$1-'); console.log(formattedInput); }); 

正则表达式的作用是:

  • 它寻找正好三位数的组(\\d{3})
  • ... 紧随其后的是至少另一个数字(?=\\d)
  • 并将其替换为匹配的组和破折号$1-

看起来很奇怪(?=\\d)是积极的前瞻,不包括其后的第四个数字。 这样可以防止在格式化字符串的末尾添加多余的破折号。

请注意,您可以使用字符组[\\s-]一步替换破折号和空格。

输出:

004-448-555-583-61
022-198-532-4
555-372-654
123-456-798
123-456-789-11

1

S=["00-44 48 5555 8361","0 - 22 1985--324","555372654"]

您只需要一行:

S.map(str=>str.replace(/[- ]/g, "").match(/(\d{1,3})/g).join('-'));

这将迭代您的字符串数组,删除所有空格和-,然后匹配1到3个数字(首先是贪婪的,因此尽可能匹配3个数字),并最终在-之间将这些匹配项连接在一起。

运行以下示例:

 console.log( ["00-44 48 5555 8361","0 - 22 1985--324","555372654"] .map(str=>str.replace(/[- ]/g, '') .match(/(\\d{1,3})/g) .join('-') ) ); 

一些解决此问题的一般技巧:

1)您可能要先从输入中删除空格和破折号,例如:

S = S.replace(" ", "")

2)您可以像这样通过索引访问字符串中的某个字符:

S[i] // e.g. "0"

3)要检查您是否在第三个位置是否需要添加破折号,只需在该位置上使用模数即可:

if(n % 3 === 0) { /* add - */}

4)您可以建立一个新字符串并使用+=添加字符:

let result = "123";
result += "-";

一种方法是先删除所有数字,然后再分割为第三个数字。 然后将数组与-

 const tests = [ '123-15 68--5722', '123-15 68 52', '123--125--68--572', '123 abc 15 68 d efg 52', ] function format(num) { // Remove everything that isn't a number return num.replace(/[^0-9]/g, '') // Spilt on every 3rd number .match(/\\d{1,3}/g) // Join with dashes .join('-') } tests.forEach(num => console.log(format(num))) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM