正则表达式号码手机

时间:2011-05-30 11:28:18

标签: c# .net asp.net regex validation

我的话(电话号码)可能在开头“00”或“+”。

电话号码示例:

00xxx xx xxxxxxx
+xxx xx xxxxxxx
(+xxx) xx xxxxxxx
(00xxx) xx xxxxxxx

我有:

Regex regexObj = new Regex(@"^\(?[+( ]?([0-9]{3})\)?[) ]?([0-9]{2})[- ]?([0-9]{7})$");

if (regexObj.IsMatch(TextBox1.Text))
{
    // IF OK
    string formattedPhoneNumber = regexObj.Replace(TextBox1.Text, "(+$1) $2 $3");
}

如何将它放在正则表达式中?现在我只能把“+”和“(”,“)”

感谢

5 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

这可选择匹配您的4个不同的电话前缀,后跟2个数字,后跟7个数字。

(?:(00\d{3})|(\+\d{3})|(\(\+\d{3}\))|(\(00\d{3}\)))\s(\d{2})\s(\d{7})

答案 2 :(得分:1)

怎么样:

Regex regexObj = new Regex(@"^(?:\(?)(?:\+|0{2})([0-9]{3})\)? ([0-9]{2}) ([0-9]{7})$");

编辑:

^(?:\((?:\+|00)([0-9]{3})\)|(?:\+|00)([0-9]{3}))? ([0-9]{2})[- ]?([0-9]{7})$

答案 3 :(得分:1)

使用您的示例进行测试:

Regex regexObj = new Regex(@"^(?:(?:\+|00)([0-9]{3})|\((?:\+|00)([0-9]{3})\))[- ]?([0-9]{2})[- ]?([0-9]{7})$");

if (regexObj.IsMatch(TextBox1.Text))
{
    //IF OK
    string formattedPhoneNumber = regexObj.Replace(TextBox1.Text, "(+$1$2) $3 $4");
}

说明:

(?:\+|00)+00 - 无捕获

(?:(?:\+|00)([0-9]{3})|\((?:\+|00)([0-9]{3})\)):+ xxx或00xxx或(+ xxx)或(00xxx),仅捕获数字。将( )匹配分开是很重要的,这样如果包含括号,则必须存在匹配(即(+999 99 9999999无效。

"(+$1$2) $3 $4":匹配将捕获第一个或第二个([0-9] {3})组,但不是两个 - 必须在此处组合它们。

答案 4 :(得分:1)

将工作分成几个步骤。

第一步必须是在调查其余数字之前剥离+ 353,003 353,011 353,+ 353(0),00 353(0),011 353(0)或0前缀。

  Pattern: ^(\(?(?:0(?:0|11)\)?[\s-]?\(?|\+)(353)\)?[\s-]?)?\(?0?(?:\)[\s-]?)?([1-9]\d{1,4}\)?[\d\s-]+)((?:x|ext\.?|\#)\d{3,4})?$

使用上述模式从$ 2中提取'353'以了解使用了国际格式,否则假设$ 2为空时采用国家格式。

从$ 4中提取可选的分机号码详细信息并存储起来供以后使用。

从$ 3中提取NSN(包括空格,连字符和括号)。

删除这些空格,连字符和括号,并使用另一个更详细的RegEx模式来验证数字的NSN部分的长度和初始数字。

不要担心用户输入不匹配的括号或随机标点符号。目标是确保用户输入正确的数字位数以生成有效的电话号码。提取并验证该数字,然后使用每个数字范围的正确格式规则对其进行清理以显示。