[英]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);
}
干杯
您在if块中使用了赋值运算符(=)而不是相等运算符(==)。
如您的代码所示,“ 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.