Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接受电话号码的正则表达式_Java_Python_Regex - Fatal编程技术网

Java 接受电话号码的正则表达式

Java 接受电话号码的正则表达式,java,python,regex,Java,Python,Regex,可能重复: 我需要一个接受以下所有电话号码格式的正则表达式: +1-650-123-0123 (650)123 0123 (650)123-0123 (+1):650-123-0123 (+1)650 123 0123 我目前有以下正则表达式: \(?\+?[0-9]?\)?-?\(?(\d{3})\)?(\s|-)+(\d{3})(\s|-)+(\d{4}) 我目前面临的问题是,它接受了大多数,但不接受以下内容:(650)123-0123。中间的部分((s)+)应该只匹配如果它找到(XYZ

可能重复:

我需要一个接受以下所有电话号码格式的正则表达式:

+1-650-123-0123

(650)123 0123

(650)123-0123

(+1):650-123-0123

(+1)650 123 0123

我目前有以下正则表达式:

\(?\+?[0-9]?\)?-?\(?(\d{3})\)?(\s|-)+(\d{3})(\s|-)+(\d{4})
我目前面临的问题是,它接受了大多数,但不接受以下内容:(650)123-0123。中间的部分((s)+)应该只匹配如果它找到(XYZ)。我该怎么做?我试着做了一个向前看/向后看的动作,但没能成功


谢谢

请查看下面我的来源。这将为您提供许多起点,用于构建电话号码的正则表达式


是我的来源。

请检查下面的我的来源。这将为您提供许多起点,用于构建电话号码的正则表达式


是我的源代码。

您可以使用类似
(?(?=regex)then | else)的条件look ahead
,但AFAIK Java的标准regex引擎不支持这些

或者,构建两个表达式并测试其中是否有匹配的表达式。这将使读/写表达式更容易,甚至可能不会对性能造成明显的影响。如果需要在单个表达式中使用所有这些表达式,请尝试以下操作:

^expression1$|^expression2$|...

但是,请注意,如果表达式变得太复杂,这可能会导致一些问题(一些JVM版本似乎对
(or)表达式有困难。

您可以使用类似
(?(?=regex)然后| else)的条件look ahead
,但AFAIK Java的标准正则表达式引擎不支持这些

或者,构建两个表达式并测试其中是否有匹配的表达式。这将使读/写表达式更容易,甚至可能不会有明显的性能影响。如果需要在单个表达式中包含所有表达式,请尝试以下操作:

^expression1$|^expression2$|...
但是,请注意,如果表达式变得太复杂,这可能会导致一些问题(某些JVM版本似乎在使用
|
(或)表达式时遇到困难。

有一个解决了您的问题的方法

他们的解决方案已经被采纳

功能亮点 分析/格式化/验证所有国家/地区的电话号码 世界的一部分

getNumberType
-根据 数字本身;能够区分固定电话、移动电话、免费电话、, 保费、共享成本、VoIP和个人号码(无论何时) 可行)

isNumberMatch
-获取两个 数字可能是相同的

getExampleNumber
/
getExampleNumberByType
- 提供所有国家/地区的有效示例编号,包括 指定需要哪种类型的示例电话号码的选项

isPossibleNumber
-快速猜测一个数字是否可能 phonenumber只使用长度信息,比 完全验证

isValidNumber
-对的电话号码进行完全验证 使用长度和前缀信息的区域

asyutypeformatter
- 当用户输入每个数字时,动态格式化电话号码

findNumbers
-在文本输入中查找数字

phonenumberofrinegeocoder
-提供与电话号码相关的地理信息

有一个解决你问题的方法

他们的解决方案已经被采纳

功能亮点 分析/格式化/验证所有国家/地区的电话号码 世界的一部分

getNumberType
-根据 数字本身;能够区分固定电话、移动电话、免费电话、, 保费、共享成本、VoIP和个人号码(无论何时) 可行)

isNumberMatch
-获取两个 数字可能是相同的

getExampleNumber
/
getExampleNumberByType
- 提供所有国家/地区的有效示例编号,包括 指定需要哪种类型的示例电话号码的选项

isPossibleNumber
-快速猜测一个数字是否可能 phonenumber只使用长度信息,比 完全验证

isValidNumber
-对的电话号码进行完全验证 使用长度和前缀信息的区域

asyutypeformatter
- 当用户输入每个数字时,动态格式化电话号码

findNumbers
-在文本输入中查找数字

phonenumberofrinegeocoder
-提供与电话号码相关的地理信息


请看。@edmastermind29,这不是他想要的。他必须验证给定的电话号码,而不是将其正常化。我不确定,但看起来您希望在(650)后面有一个空格或带(\s|-)+您可以使用多个regexp和/或它们。在某些情况下,多个简单regexp更容易调试。是的,但我只需要一个空格或-如果发现类似(650)的内容before..这可能吗?请看。@edmastermind29,这不是他想要的。他必须验证给定的电话号码,而不是将其正常化。我不确定,但看起来您希望在(\s |-)的(650)后面有一个空格或+您可以使用多个regexp和/或它们。在某些情况下,多个简单regexp更容易调试。是的,但我只需要一个空格或-如果发现类似(650)的内容之前..这可能吗?复制粘贴不是很好的练习。我不想要一个全新的正则表达式。我想要我的思维过程,添加一些东西或更改一些东西使其工作。复制你的正则表达式对我没有帮助。整个想法是我学习如何修复我的最终正则表达式