繁体   English   中英

如何以简洁的方式在JavaScript中删除空格,破折号和句点并进行替换?

[英]How do I remove spaces, dashes, and periods with replace in JavaScript in a concise way?

有没有办法以更有效(更清洁)的方式执行以下操作?

function phoneFormat(number){
      var noSpace = number.split(" ").join("");
      var noSpace = noSpace.replace(/-/g, "");
      return noSpace.replace(/./g, "");
    }

更改此数字后,我想将其重新格式化为(ddd)ddd-dddd。 我当时正在考虑使用split and push来做到这一点,但是有没有更聪明的方法?

字符类与正则表达式一起使用:

return number.replace(/[- .]/g, "");

就是说“用空白字符串替换字符串中的- ,空格和.字符。” []表示类,表示“这些字符中的任何一个”。 请注意,我将-放在其开头; 如果不是在开头或结尾,则必须使用反斜杠将其转义,因为否则会在该类中引入一系列字符(例如AZ是所有大写英文字母)。 但是,当它是第一件事(紧接在[ ]或最后一件事(紧接在]之前)时,并不特殊。 还要注意一会儿. 通常在正则表达式中很特殊(意思是“在这里的任何字符”),在字符类中并不特殊。


发表您的评论:

您知道是否有一种聪明的方法可以将其重新格式化为(ddd)ddd-ddd吗?

您在问题中说了(ddd) ddd-dddd ,所以我假设最后有四个,而不是三个(例如,您在美国,加拿大或美洲的许多其他地区):

例如,如果x具有"1234567890" ,则x.replace(/^(\\d{3})(\\d{3})(\\d{4})$/, '($1) $2-$3')将返回"(123) 456-7890" (...)捕获组 ,替换字符串中的$1等用于放置捕获的文本。

所以:

return number.replace(/[- .]/g, "").replace(/^(\d{3})(\d{3})(\d{4})$/, '($1) $2-$3');

\\d表示“数字”(0-9),而{3}表示“正好是三件事”,因此\\d{3}表示“三位数”(当然, \\d{4}表示“恰好是四位数”)。 ^$ “断言”输入的开始和结束。


不过,我应该指出,验证和重新格式化电话号码往往会出现问题。 例如,通过执行上述操作,您使某人无法使用国际电话号码或带扩展名的电话号码(例如(408)555-1212内线1234),等等。

排除不包含数字的任何内容,然后使用仅包含数字的字符串执行最终格式化可能更为有用:

function phoneFormat(input) {
    return input.replace(/\D/g, '')
                .replace(/(...)(...)(....)/, '($1) $2-$3');
}

console.log(phoneFormat('123/45.67.890'));

输出:

(123)456-7890

\\D必须为大写字母,并且匹配非数字的任何内容。

第二个正则表达式中的点匹配任何字符,但是到那时我们已经知道它们都是数字。 通过三个捕获组,我们可以对它们使用反向引用进行最终格式化。

上述功能的缺点是,即使输入不代表电话号码,它也只返回数字。 如果这是一个问题,那么您可以使用此变体:

function phoneFormat(input) {
    var digits = input.replace(/\D/g, '');
    if (digits.length !== 10) return input; // not valid: return original
    return digits.replace(/(...)(...)(....)/, '($1) $2-$3');
}

仅在原始输入中恰好有10位数字时,才返回格式化的字符串。

用这个

function phoneFormat(number){
return number.replace(/-|\.|\s/g,'').replace(/(\d{3})(\d{3})(\d{3})/g,'($1) $2-$3');
}

暂无
暂无

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

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