正则表达式为字母数字,但至少有一个字符

时间:2009-06-27 02:25:57

标签: .net regex

在我的asp.net页面中,我有一个输入框,必须对其进行以下验证:

必须是字母数字,至少包含1个字符(即不能是所有数字)。

6 个答案:

答案 0 :(得分:54)

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

基本上这意味着:

  • 零个或多个ASCII数字;
  • 一个字母ASCII字符;
  • 零个或多个字母数字ASCII字符。

尝试一些测试,你会发现这会传递任何字母数字的ASCII字符串,其中至少需要一个非数字ASCII字符。

关键是前面的\d*。没有它,正则表达式会变得更加尴尬。

答案 1 :(得分:19)

这个问题的大多数答案都是正确的,但是如果你想稍后改变规则,那么(在某些情况下)可以提供更多的灵活性:

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$

这将匹配任何字母数字字符序列,但前提是第一组也匹配整个序列。这是正则表达式中一个鲜为人知的技巧,可以让你处理一些非常困难的验证问题。

例如,假设您需要添加另一个约束:字符串的长度应为6到12个字符。这里发布的明显解决方案不起作用,但使用前瞻性技巧,正则表达式简单地变为:

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$

答案 2 :(得分:5)

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

说明:

  • [\p{L}\p{N}]*匹配零个或多个Unicode字母或数字
  • \p{L}匹配一个字母
  • [\p{L}\p{N}]*匹配零个或多个Unicode字母或数字
  • ^$锚定字符串,确保正则表达式与整个字符串匹配。您可以省略这些,具体取决于您调用的正则表达式匹配函数。

结果:你可以有任何字母数字字符串,除非那里有一个字母。

\p{L}[A-Za-z]类似,不同之处在于它将包含所有字母的所有字母,包含或不包含重音符号和变音符号。它更具包容性,使用更大的Unicode字符集。如果您不希望这种灵活性取代[A-Za-z]。类似的注释适用于\p{N},如果您想保持简单,可以将其替换为[0-9]。有关详细信息,请参阅MSDN page on character classes

不那么花哨的非Unicode版本

^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$

答案 3 :(得分:1)

^[0-9]*[A-Za-z][0-9A-Za-z]*$

是正在执行你所追求的正则表达式。 ^和$匹配单词的开头和结尾以防止其他字符。你可以用\ w替换[0-9A-z]块,但我更喜欢更详细的形式,因为如果你愿意的话,它更容易与其他字符一起扩展。

根据MSDN上的教程http://msdn.microsoft.com/en-us/library/ms998267.aspx,将正则表达式验证器添加到您的asp.net页面。

答案 4 :(得分:1)

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

这个并不难。正则表达式为:匹配以任意数量的单词字符开头的行(字母,数字,标点符号(您可能不需要)),包含一个字母字符(中间是[\p{L}]部分),后面跟着再用任意数量的单词字符。

如果要排除标点符号,则需要更严格的表达式:

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

如果您不关心Unicode,可以使用无聊的表达式:

^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$

答案 5 :(得分:0)

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

可以

  • 以字符结尾的任何数字,
  • 或以字符
  • 开头的字母数字表达式
  • 或以数字开头的字母数字表达式,后跟一个字符,以字母数字子表达式结束