我想用电话号码为 10位数手机号码制作正则表达式。例子是
9088534816
+91 33 40653155
033-2647-0969
我想创建一个正则表达式,它可以匹配所有三种格式,如
xxxxxxxxxx
+xx xx xxxxxxxx
xxx-xxxx-xxxx
格式。可以帮到我吗?我试过这个
\+?\d[\d -]{8,12}\d
但它也是这个号码12115351689385.这是我的问题
答案 0 :(得分:6)
设计并测试每个模式 separtely :
Format Pattern
-------------------------------------------------
xxxxxxxxxx ^[0-9]{10}$
+xx xx xxxxxxxx ^\+[0-9]{2}\s+[0-9]{2}\s+[0-9]{8}$
xxx-xxxx-xxxx ^[0-9]{3}-[0-9]{4}-[0-9]{4}$
....
然后将组合成最后一个:
(pattern1)|(pattern2)|...|(patternN)
对于上面三种模式,组合模式是
(^[0-9]{10}$)|(^\+[0-9]{2}\s+[0-9]{2}[0-9]{8}$)|(^[0-9]{3}-[0-9]{4}-[0-9]{4}$)
你可以实现这样的东西:
//TODO: you may want to load the patterns supported from resource, file, settings etc.
private static string[] m_Patterns = new string[] {
@"^[0-9]{10}$",
@"^\+[0-9]{2}\s+[0-9]{2}[0-9]{8}$",
@"^[0-9]{3}-[0-9]{4}-[0-9]{4}$",
};
private static string MakeCombinedPattern() {
return string.Join("|", m_Patterns
.Select(item => "(" + item + ")"));
}
试验:
string[] tests = new string[] {
"9088534816",
"+91 33 40653155",
"033-2647-0969",
"123",
"12115351689385",
};
var result = string
.Join(Environment.NewLine, tests
.Select(test =>
$"{test,18} {(Regex.IsMatch(test, MakeCombinedPattern()) ? "yes" : "no"),3}"));
Console.Write(result);
结果:
9088534816 yes
+91 33 40653155 yes
033-2647-0969 yes
123 no
12115351689385 no
答案 1 :(得分:1)
首先简化输入字符串(以简化RegEx模式)
phones = phones.Replace(" ", "").Replace("-","");
现在只需找到数字......
var m = Regex.Matches(a, @"\+?[0-9]{10}");
答案 2 :(得分:0)
第一种和第三种格式(实际上大多数更常见的美国电话号码格式)可以合并为一种正则表达式模式:
^[(]?\d{3}[)]?[- ]?\d{3}[- ]?\d{4}$
第二种格式比较棘手,因为它是一个国际电话号码。不同的国家/地区具有不同的数字格式,因此解析起来不那么简单。如果您希望在示例中添加对特定国家/地区的支持,您也可以为其编写模式。您的具体示例如下:
^\+\d{2} \d{2} \d{8}$
(我不能像我做第一个模式那样对多个约定进行优化,因为我不熟悉那个电话号码格式。我不知道它是否允许破折号或是否有空格或可选或任何其他文化差异。)
在拥有所需的所有模式后,您可以将它们组合起来,就像Dmitry的回答建议String.Join
一样,然后将结果用作Regex.Match / Regex.Matches
调用的模式。
答案 3 :(得分:0)
对于伊朗手机号码,语法为^[0][9]\d{9}$
答案 4 :(得分:0)
有效电话号码的正则表达式
public static bool IsPhoneNumberValid(this string phone)
{
bool isValid = false;
if (!string.IsNullOrWhiteSpace(phone))
{
isValid = Regex.IsMatch(phone, @"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}",
RegexOptions.IgnoreCase);
}
return isValid;
}