【问题标题】:C# Regex to allow only alpha numericC# 正则表达式只允许字母数字
【发布时间】:2011-12-29 08:08:40
【问题描述】:

我有以下正则表达式^[a-zA-Z0-9]+$,它允许使用字母数字字符。这里的问题是,如果我只输入像“897687”这样的数字字符,那么正则表达式仍然匹配。我不希望这种情况发生。应该至少有一个文本字符,并且应该以一个文本字符开头。例如像“a343”或“a98bder”或“a4544fgf343”

如果您能帮助我改进我的正则表达式,那就太好了。

【问题讨论】:

  • 顺便说一句,“应该至少有一个字母表并且应该以一个字母表开头”,后者意味着前者总是正确的。所以要求是“它应该以字母开头”。现在去投票罗兰,因为他非常了解这一点:-)

标签: c# regex


【解决方案1】:

听起来像你想要的:

^[a-zA-Z][a-zA-Z0-9]*$

解释

^ 在行首断言位置

匹配下面列表中的单个字符 [a-zA-Z]

» a-z 介于 a(索引 97)和 z(索引 122)之间的单个字符(区分大小写)

» A-Z 介于 A(索引 65)和 Z(索引 90)之间的单个字符(区分大小写)

匹配下面列表中的单个字符 [a-zA-Z0-9]*

* 量词 — 在零次和无限次之间匹配,尽可能多次,根据需要回馈(贪心)

a-z 介于 a(索引 97)和 z(索引 122)之间的单个字符(区分大小写)

A-Z 介于 A(索引 65)和 Z(索引 90)之间的单个字符(区分大小写)

0-9 0(索引 48)和 9(索引 57)之间的单个字符(区分大小写)

$ 在行尾断言位置

Demo

【讨论】:

    【解决方案2】:

    以防 ASCII 字符在某些时候不够用,这里是 Unicode 版本:

    ^\p{L}[\p{L}\p{N}]*$
    

    \p{L} 是具有属性 letter ==> 任何语言的任何字母(即 Unicode)的任何 Unicode 代码点

    \p{N} 是具有属性 number ==> 任何语言(即 Unicode)的任何数字字符的任何 Unicode 代码点

    【讨论】:

    • 这应该是公认的答案,如果输入不一定是 ANSI,它会更加健壮。
    【解决方案3】:
    ^[a-zA-Z][a-zA-Z0-9]*$
    

    应该做的伎俩!

    或者,如果您希望包含所有字母数字和下划线,您可以使用:

    ^[a-zA-Z][\w]*$
    

    【讨论】:

    • 空格绝对不包含在\w 中。在 .net 中是 [\p{L}\p{N}_],它包括所有 Unicode 字母、数字和(至少)下划线。
    • @stema 抱歉打错了,我的头说下划线,但我的手指输入了空格。好地方,谢谢。
    【解决方案4】:

    这个函数会根据正则表达式是否匹配返回真或假,

       public static Boolean isAlphaNumeric(string strToCheck)
        {
            Regex rg = new Regex(@"^[a-zA-Z0-9\s,]*$");
            return rg.IsMatch(strToCheck);
        }
    

    【讨论】:

      【解决方案5】:

      这是检查字母数字的最佳解决方案,

      • 如果它只是字符串 - “错误”。
      • 如果它只是整数 - “错误”。
      • 如果是字母数字 - “成功”。

        if (System.Text.RegularExpressions.Regex.IsMatch(txt.Text, @"[a-zA-Z]") && 
            System.Text.RegularExpressions.Regex.IsMatch(txt.Text, @"[0-9]")      
        {
            // Success - It is alphanumric
        }
        else   
        {
            // Error - It is not alphanumric
        }
        

      【讨论】:

        【解决方案6】:

        或者比接受的答案略少:

        ^[a-zA-Z][\w]*$
        

        C# 正则表达式具有用于字母数字字符的字符类指示符“\w”,但没有仅用于字母(无数字)的字符类,因此您必须手动指定类集 [a-zA-Z]。

        【讨论】:

        猜你喜欢
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-20
        相关资源
        最近更新 更多