Java 如何使用regex忽略电话号码上的国家代码(带和不带+;)
因此,我正在构建一个带有电话号码注册的应用程序。在OTP页面中,我希望显示带有分隔符的电话号码(由用户输入),并遵循以下规则:(我来自印度尼西亚,所以我的国家代码为+62) 有人能帮我吗?谢谢你 编辑:电话号码的范围为9-14位,您可以与匹配多个组的正则表达式一起使用,例如:Java 如何使用regex忽略电话号码上的国家代码(带和不带+;),java,regex,Java,Regex,因此,我正在构建一个带有电话号码注册的应用程序。在OTP页面中,我希望显示带有分隔符的电话号码(由用户输入),并遵循以下规则:(我来自印度尼西亚,所以我的国家代码为+62) 有人能帮我吗?谢谢你 编辑:电话号码的范围为9-14位,您可以与匹配多个组的正则表达式一起使用,例如: String[] phones = {"+628101234567890", "628101234567890", "08101234567890"}; for (String phone : phones) {
String[] phones = {"+628101234567890", "628101234567890", "08101234567890"};
for (String phone : phones) {
System.out.println(phone.replaceAll("(.*)(....)(....)(..)", "$1-$2-$3-$4"));
}
输出
+62810-1234-5678-90
62810-1234-5678-90
0810-1234-5678-90
你甚至可以使用这个正则表达式
详细信息
我想从头到尾解释一下正则表达式:
匹配2个字符的最后一组(..)
两组4个字符(..)(..)
和其他字符(.*)
String[] phones = {"+628101234567890", "628101234567890", "08101234567890"};
for (String phone : phones) {
System.out.println(phone.replaceAll("(.*)(....)(....)(..)", "$1-$2-$3-$4"));
}
输出
+62810-1234-5678-90
62810-1234-5678-90
0810-1234-5678-90
你甚至可以使用这个正则表达式
详细信息
我想从头到尾解释一下正则表达式:
匹配2个字符的最后一组(..)
两组4个字符(..)(..)
和其他字符(.*)
^ : start of string, so 99962999 will not match ^62
\\d : digit
X? : optional X
X{3} : XXX
(X|Y|Z) : either X, Y or Z
添加了第二个替换项 要解决0810-1234-56到0810-1234-5678-90这两个问题,第一个替换者first只适用于较长的号码。如果被替换,附加的
-
会导致第二个replaceFirst不工作(返回刚刚替换的字符串)
这将从开始处选择0+62和62,然后是数字组。其余的不被替换。然后返回原始电话,比如外国号码
作为额外的预防措施,应提前移除空间
^ : start of string, so 99962999 will not match ^62
\\d : digit
X? : optional X
X{3} : XXX
(X|Y|Z) : either X, Y or Z
添加了第二个替换项
要解决0810-1234-56到0810-1234-5678-90这两个问题,第一个替换者first只适用于较长的号码。如果被替换,附加的
-
会导致第二个replaceFirst不起作用(返回刚刚替换的字符串)。也许您可以从google查看此电话库(如果您使用任何支持的语言编码)。它可以帮助您在不编写自己的正则表达式的情况下解析和格式化数字。也许您可以从google查看此电话库(如果您使用任何支持的语言进行编码)。它可以帮助您解析和格式化数字,而无需编写自己的正则表达式欢迎使用堆栈溢出!请拿着这本书,通读一遍,特别是做你的研究,看看相关的主题,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。祝你好运欢迎来到堆栈溢出!请拿着这本书,通读一遍,特别是做你的研究,看看相关的主题,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。祝你好运在这种情况下,惰性点量词的性能更好。(.+?)
@revo你的意思是(.*)
不?你不需要星号。它以一种惰性的方式在每一步匹配零长度位置。为了性能起见,此^*$(?@YCF_L非常感谢你的回答,这在这种情况下非常有效,但我还有一个问题,电话号码的范围是9-14位从0810-1234-56到0810-1234-5678-90
@AlvinWidjaja你什么意思我不明白?在这种情况下,懒点量词的性能更好(.+?)
@revo你的意思是(*?)
no?您不需要星号。它以一种惰性的方式在每一步匹配零长度位置。为了性能起见,此^*$(?@YCF_L非常感谢你的回答,这在这种情况下非常有效,但我还有一个问题,电话号码的范围是9-14位从0810-1234-56到0810-1234-5678-90
@AlvinWidjaja你什么意思我不明白?非常感谢你的回答,这在这种情况下非常有效,但我还有一个问题如果电话号码的范围为9-14位,从0810-1234-56到0810-1234-5678-90。在这种情况下,只需替换两个正则表达式似乎是最简单的,请参阅扩展答案。如果正则表达式不匹配,则返回传递的字符串。非常感谢您的回答,在这种情况下这非常有效,但我还有一个问题,电话号码范围为9-14位,从0810-1234-56到0810-1234-5678-90。在这种情况下,似乎最简单的方法是只替换两个正则表达式,请参阅扩展答案。如果正则表达式不匹配,则返回传递的字符串。