C#正则表达式:仅允许字母数字

29
我有以下正则表达式^[a-zA-Z0-9]+$,它允许字母数字字符。问题在于,如果我只输入数字字符如“897687”,那么正则表达式仍然匹配。我不想这样。应该至少有一个文本字符,并且以文本字符开头。例如像"a343"或"a98bder"或"a4544fgf343"。
如果您能帮助我改进正则表达式,那将是非常好的。

2
顺便提一下,“至少应该有一个字母并且它应该以字母开头”的意思是后者总是成立。因此,要求是“它应该以字母开头”。现在去点赞 Rowland,因为他理解得很好 :-) - paxdiablo
6个回答

52

听起来你想要:

^[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)之间的单个字符(区分大小写)

$ 表示匹配行的结尾位置

演示


你能帮我理解一下吗?我总是看到“零和无限”,这是否意味着即使没有匹配项也会返回true?就像说“我会给你零或无限量的饼干”有点像是我一个饼干都拿不到 :) - Dan Chase
确切地说,丹...你可以使用+表示_1或更多_,以确保你至少得到一个cookie ;) - Rowland Shaw

18

如果ASCII字符在某个时候不足够,这里是Unicode版本:

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

\p{L}代表具有字母属性的任何Unicode代码点,即来自Unicode中任何语言的字母

\p{N}代表具有数字属性的任何Unicode代码点,即来自Unicode中任何语言的数字字符


这应该是被接受的答案,如果输入不一定是ANSI,它会更加稳健。 - Gyum Fox

6
这个函数会根据正则表达式是否匹配返回true或false的值。
   public static Boolean isAlphaNumeric(string strToCheck)
    {
        Regex rg = new Regex(@"^[a-zA-Z0-9\s,]*$");
        return rg.IsMatch(strToCheck);
    }

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

应该可以解决问题!

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

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

1
空格绝对不包含在\w中。在.NET中,它是[\p{L}\p{N}_],它包括所有Unicode字母、数字和(至少)下划线。 - stema
@stema 对不起打错了,我脑子想的是下划线,但手指敲成了空格。发现得好,谢谢。 - Rich O'Kelly

3

或者比被接受的答案稍微简洁一些:

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

C# 正则表达式中有用于匹配字母数字字符的字符类指示符 "\w",但没有只匹配字母(不包含数字)的字符类,因此您需要手动指定类集合 [a-zA-Z]。


1
如先前所述,[\w] 包括下划线字符,该字符在原始帖子中未被要求,并且与已接受的答案不相等。https://msdn.microsoft.com/zh-cn/library/vstudio/20bw873z(v=vs.110).aspx#WordCharacter - fractor

3

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

  • if it is only string - "Error".
  • if it is only integer - "Error".
  • if it is alphanumeric -"Success".

    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
    }
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接