我希望Regex以给定格式验证移动电话和电话号码

时间:2015-01-15 01:28:25

标签: c# regex validation

我希望用户只能输入指定格式的手机/电话号码。

+1234567891>如果精确使用+,则加上用户不能输入0或00,如果在+之后使用+,则只允许使用10到14位数。

01234567891>当用户输入单个0时,用户必须在0之后输入10个数字。

00123456789>当用户输入双00后,用户不能在双00后输入第3个0,用户必须在双00后输入10到14位数。

我的代码是这个,任何人都可以帮助我吗?

string mob = txtmobile.Text.Trim();
Regex plus = new Regex("^[+]?<!(0|00)[0-9]{10,14}$");
Regex zero = new Regex("^[0]{1}[0-9]{10}$");
Regex zeroes = new Regex("^[0]{2}[^0][0-9]{10,14}$");

        if (!plus.IsMatch(mob))
        {
            if (!zero.IsMatch(mob))
            {
                if (!zeroes.IsMatch(mob))
                {
                    lblmobile.Text = "*Mobile number must be correct format";
                    lblmobile.Visible = true;
                    flg = false;
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

试试这个:\+0[0-9]{9}|\+0[1-9][0-9]{12}|0[1-9][0-9]{8}|00[1-9][0-9]{9}|00[1-9][0-9]{13}

或者:\+0\d{9}|\+0[1-9]\d{12}|0[1-9]\d{8}|00[1-9]\d{9}|00[1-9]\d{13}

答案 1 :(得分:0)

您的模式的常见问题是它们允许在所有情况下输入零。 让我们以^[+]?<!(0|00)[0-9]{10,14}$为例 - 你告诉引擎这个:

  • 匹配&#34; +&#34;登录
  • 断言立即没有零或双零
  • 匹配10到14位,包括

您需要以这种方式更改模式:

  • 代表加号规则:^[+][1-9][0-9]{9,13}$;这转换为:&#34;匹配加号,1到9之后的数字和0到9之间的9到13位数&#34;
  • 代表规则:^0[1-9][0-9]{9}$
  • 代表规则:^00[1-9][0-9]{9,13}$

顺便说一句,规则的示例无效; 00之后只有9位数。