C#-Regex验证所有电话号码?
我找到以下正则表达式来验证所有可能的电话号码,并在上进行了测试: 那么,为什么我在代码中使用它时,它与下面的数字不匹配C#-Regex验证所有电话号码?,c#,regex,C#,Regex,我找到以下正则表达式来验证所有可能的电话号码,并在上进行了测试: 那么,为什么我在代码中使用它时,它与下面的数字不匹配 string text = "Herzeliya, Israel Tel: 972-52-2650599 Born 17/1/1975,"; List<string> Phones = new List<string>(); Regex phon1Regex = new Regex(@"^\s*(?:\+?(\d{1,3}))?([-. (]*(\d
string text = "Herzeliya, Israel Tel: 972-52-2650599 Born 17/1/1975,";
List<string> Phones = new List<string>();
Regex phon1Regex = new Regex(@"^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$");
MatchCollection phon1Matches = phon1Regex.Matches(text);
foreach (Match phon1Match in phon1Matches)
Phones.Add(phon1Match.Value);
string text=“Herzeliya,以色列电话:972-52-2650599出生于1975年1月17日,”;
列表电话=新列表();
Regex phon1Regex=newregex(@“^\s*(?:\+?(\d{1,3}))?([-.(]*(\d{3})[-.]*)((\d{3})[-.]*(\d{2,4})(?:[-.x]*(\d+))\s*$”;
MatchCollection phon1Matches=phon1Regex.Matches(文本);
foreach(在phon1Match中匹配phon1Match)
电话。添加(phon1Match.Value);
电话列表保持为空
我在这里遗漏了什么?您不仅要检查电话号码字符串表示形式是否有效,还需要在更大的字符串中找到它。这两个操作完全不同,因此应分别解决。不可能有一个完美的“一刀切”正则表达式解决方案。如果有的话,不同的文化在毫无用处地相互区别时失败了,他们真的不喜欢这样;) 理想情况下,您不应该在单个字符串中包含所有这些数据。字符串是第二难自动化的格式(只有原始二进制更差)。解析这些将是一件痛苦的事情。至少,这些字符串在段或键/值对之间应该有适当的逗号分隔。 如果您可以将源代码修改为更加自动化友好的,请先这样做。即使是一些XML输出或适当的CSV也将是一个巨大的进步 电话号码识别与任何其他号码识别一样:格式不是固定的,而且确实与日期时间和其他号码一样受文化的影响:
- 地点(Herzeliya,以色列);也许城市和国家是分开的领域
- 电话号码(972-52-2650599)
- 出生日期(1975年1月17日)
然后,您可以考虑解析这些字符串中的每一个,包括电话号码。您不仅要检查电话号码字符串表示形式是否有效,还要在更大的字符串中找到它。这两个操作完全不同,因此应分别解决。不可能有一个完美的“一刀切”正则表达式解决方案。如果有的话,不同的文化在毫无用处地相互区别时失败了,他们真的不喜欢这样;) 理想情况下,您不应该在单个字符串中包含所有这些数据。字符串是第二难自动化的格式(只有原始二进制更差)。解析这些将是一件痛苦的事情。至少,这些字符串在段或键/值对之间应该有适当的逗号分隔。 如果您可以将源代码修改为更加自动化友好的,请先这样做。即使是一些XML输出或适当的CSV也将是一个巨大的进步 电话号码识别与任何其他号码识别一样:格式不是固定的,而且确实与日期时间和其他号码一样受文化的影响:
- 地点(Herzeliya,以色列);也许城市和国家是分开的领域
- 电话号码(972-52-2650599)
- 出生日期(1975年1月17日)
然后您可以考虑解析这些字符串中的每一个,包括电话号码。锚-删除
^
和$
。请看。@WiktorStribiżew正在测试它……谢谢@WiktorStribiżew。你想把这个作为一个答案吗?事实上,我认为这个模式需要修剪一下。您没有使用它的任何捕获,对吗?此外,您可能对提取像这样的数字不感兴趣<代码>\d
匹配它们。@WiktorStribiżew你什么意思?没有将您带到那里。锚-删除^
和$
。请看。@WiktorStribiżew正在测试它……谢谢@WiktorStribiżew。你想把这个作为一个答案吗?事实上,我认为这个模式需要修剪一下。您没有使用它的任何捕获,对吗?此外,您可能对提取像这样的数字不感兴趣<代码>\d
匹配它们。@WiktorStribiżew你什么意思?我没带你去。
string text = "Herzeliya, Israel Tel: 972-52-2650599 Born 17/1/1975,";
List<string> Phones = new List<string>();
Regex phon1Regex = new Regex(@"^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$");
MatchCollection phon1Matches = phon1Regex.Matches(text);
foreach (Match phon1Match in phon1Matches)
Phones.Add(phon1Match.Value);