空字符串或10位数的正则表达式

时间:2013-01-22 17:04:05

标签: c# regex

首先:我刚刚开始使用Regexes,而且我真的很难理解他们正在发生的事情。只是一个单挑。

对于一个项目,我正在尝试开发一个正则表达式,它采用A)空字符串(在C#speak,“”)或B)十(10)位数。我已经弄清楚如何完成10位数的部分:

"^[0-9X]{10}$"

......但不是'空字符串或'部分。我想这会是这样的:

"^[]$|^[0-9X]{10}$"

显然这不起作用,但我不知道怎么写的东西,即使有很多关于这个问题的主题。

问题:

A)如果给定字符串是string.Empty(而不是“”),或者恰好是10位数,那么正则表达式会返回true吗?

B)请解释它究竟是如何运作的。这不是我没有尝试学习(我确实发现^$是精确字符串匹配的锚点,而|是OR运算符...),它只是那个regexs显然不是我自然而然......但是,我处于一种我必须使用它们的情况。

4 个答案:

答案 0 :(得分:20)

(^$)|(^\d{10}$)

第一个选项匹配空字符串,第二个选项匹配10个数字。

我不知道您的X是什么,除非您正在寻找十六进制字符串,如果是这种情况,您将需要执行以下操作:

(^$)|(^[0-9a-fA-FxX]{10}$)

答案 1 :(得分:3)

^$|^[0-9X]{10}$

^表示匹配开头,$表示匹配结尾,因为中间没有任何内容,不匹配。如果有什么,这与

不匹配

|是备选方案之间的交替运算符

答案 2 :(得分:1)

 string a = "0123456789";
 string b = "";
 string reg = @"^(|\d{10})$";

 if ( Regex.IsMatch( a, reg ) && Regex.IsMatch( b, reg ) ) {
     Console.WriteLine( "Matched" );
 }

\d相当于[0-9]
{10}完全是十倍 |是OR运算符
^是开始,$是结尾 括号将OR操作限制为无或从开始和结束之间的十位数。

答案 3 :(得分:0)

尝试下面的REGEX ......它会起作用......

        if (Regex.IsMatch(textBox1.Text, @"^(?!\s*$).+")) //Check Not Empty String 
        {
            if (Regex.IsMatch(textBox1.Text, @"^\d{10}$")) // Check ten digits - Not allowed Alphanumeric
            {
                MessageBox.Show("find Ten digits");
            }
            else
            {
                    MessageBox.Show("Error");
            }
        }
        else
        {
            MessageBox.Show("Empty String Found");
        }