26

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

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

4

6 回答 6

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

基本上这意味着:

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

尝试一些测试,您会发现这将通过任何至少需要一个非数字 ASCII 字符的字母数字 ASCII 字符串。

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

于 2009-06-27T02:33:50.607 回答
24

这个问题的大多数答案都是正确的,但如果您想稍后更改规则,还有另一种选择,(在某些情况下)提供更大的灵活性:

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

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

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

^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
于 2009-06-28T19:35:09.590 回答
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 页面

不太花哨的非Unicode版本是

^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
于 2009-06-27T02:35:22.867 回答
2
^[0-9]*[A-Za-z][0-9A-Za-z]*$

是将做你所追求的正则表达式。^ 和 $ 匹配单词的开头和结尾以防止其他字符。您可以将 [0-9A-z] 块替换为 \w,但我更喜欢更详细的形式,因为如果您愿意,可以更轻松地使用其他字符进行扩展。

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

于 2009-06-27T02:29:33.393 回答
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]*$
于 2009-06-27T02:31:00.050 回答
0
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$

  • 任何以字符结尾的数字,
  • 或以字符开头的字母数字表达式
  • 或以数字开头、后跟字符并以字母数字子表达式结尾的字母数字表达式
于 2009-06-27T02:52:08.653 回答