Javascript 以特定方式格式化电话号码?

Javascript 以特定方式格式化电话号码?,javascript,regex,Javascript,Regex,这不是重复的,链接线程没有解释如何实现这一点 我想得到一个特定格式的电话号码 +xx x xxx xxx xxxx 国家代码。 空间 括号内为零。 空间 3位数字。 空间 3位数字。 空间 4位数字。 用户可以键入任何内容,但应始终为+61数字。到目前为止,我已经尝试了以下方法 删除空格和非数字字符。 如果以零开始,请删除。 如果从610开始,则移除。 如果从61开始,请拆下。 以特定格式重新添加国家代码,电话号码的其他格式为3,3,4格式。 我的问题是,有没有一种方法可以简单地把下面的表达变成

这不是重复的,链接线程没有解释如何实现这一点

我想得到一个特定格式的电话号码

+xx x xxx xxx xxxx

国家代码。 空间 括号内为零。 空间 3位数字。 空间 3位数字。 空间 4位数字。 用户可以键入任何内容,但应始终为+61数字。到目前为止,我已经尝试了以下方法

删除空格和非数字字符。 如果以零开始,请删除。 如果从610开始,则移除。 如果从61开始,请拆下。 以特定格式重新添加国家代码,电话号码的其他格式为3,3,4格式。 我的问题是,有没有一种方法可以简单地把下面的表达变成一个表达

    value = value.replace(/\D/g,'');
    value = value.startsWith(0) ? value.substring(1) : value;
    value = value.startsWith('610') ? value.substring(3) : value;
    value = value.startsWith('61') ? value.substring(2) : value;
    value = '+61 (0) ' + value.replace(/\d{3,4}?(?=...)/g, '$& ');

为了扩展和解释@splash58的评论,他们建议使用两个正则表达式来完成您想要的全部替换。第一个/\D | 0+| 610 | 61/gi将删除字符串中所有不需要的字符。第二个/\d{3}\d{3}\d{4}/gi将获取剩余的数字并捕获所需的分组,以便您可以根据需要格式化它们。我强烈建议查看他们提供的regex101链接,因为该站点将充分解释给定表达式如何以及为什么与右侧的表达式匹配

简短版本:

/\D | 0+| 610 | 61/gi将匹配任何非数字字符或0、610或61字符串。将其替换为不需要删除的内容

/\d{3}\d{3}\d{4}/gi将匹配一个由10位数字组成的字符串和捕获组,这就是括号,由3位数字、3位数字和4位数字组成。根据它们的位置,它们可以在替换中被引用为标识符$1、$2和$3

总而言之:

//查找字符串并仅返回格式化的电话号码 函数phonestr{ str=str.replace/\D | 0+| 610 | 61/gi; str=str.replace/\d{3}\d{3}\d{4}/gi,'+610$1$2$3'; 返回str; } 控制台.日志电话'XGSH6101234VVAJX';
控制台。日志电话“+6101234” 您可以使用以下方法匹配号码:

^.*?\+?0*610?\d{3}\d{3}\d{4}\d*$

并替换为:

+610$1$2$3

解释

^断言字符串的开头 .*? 匹配0+个非贪婪字符 \+? 匹配可选的加号 0*610? 将0+乘以零,61与可选零匹配 \d{3}\d{3}\d{4}将3个组与3、3和4个数字进行匹配 ?!\d负向前看,断言后面的不是数字 *匹配0个以上字符 $Assert是字符串的结尾 常量字符串=[ XGSH6101234VVAJX, XGSH06101231234VVAJX, XGSH000006101231234234VVAJX, +6101231231234, XGSH61012345VVAJX, XGSH5101231234VVAJX, XGSH0000101231234VVAJX, XGSH614355626455345601231234VVAJX ]; 让模式=/^.*?\+?0*610?\d{3}\d{3}\d{4}\d、 *$/; strings.forEachs=>{ console.logs.replacepattern,+610$1$2$3;
};对不起,这是漫长的一天!您是否正在尝试使用正则表达式验证移动电话号码?可能是\D | ^0+| 610 | 61的重复项为空和{3}.{3}.{2}对于+61 0$1$2$3$4splash58,请进一步解释您的评论好吗?谢谢,但如果用户在+6101234中键入,则上述操作不起作用,它会在+61 0 61之后在电话号码中添加另一个61…仅添加\+?到regex@panthro最好向您展示输入的示例expect@panthro您确定按图所示实现了它吗?你刚才提供的信息对我很有用。我已经添加到这个示例中,如果您现在点击run,您将看到它在这里工作。