【发布时间】:2009-06-27 02:25:57
【问题描述】:
在我的 ASP.NET 页面中,我有一个输入框,必须对其进行以下验证:
必须是字母数字,至少有 一个 字母(即不能是 ALL 数字)。
【问题讨论】:
标签: regex alphanumeric
在我的 ASP.NET 页面中,我有一个输入框,必须对其进行以下验证:
必须是字母数字,至少有 一个 字母(即不能是 ALL 数字)。
【问题讨论】:
标签: regex alphanumeric
^\d*[a-zA-Z][a-zA-Z0-9]*$
基本上这意味着:
尝试一些测试,您会发现这将通过任何至少需要一个非数字 ASCII 字符的字母数字 ASCII 字符串。
关键是前面的\d*。没有它,正则表达式会变得更加尴尬。
【讨论】:
这个问题的大多数答案都是正确的,但如果您想稍后更改规则,还有一个替代方法(在某些情况下)提供更大的灵活性:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$
这将匹配任何字母数字字符序列,但前提是第一组也匹配整个序列。这是正则表达式中一个鲜为人知的技巧,可让您处理一些非常困难的验证问题。
例如,假设您需要添加另一个约束:字符串长度应在 6 到 12 个字符之间。此处发布的明显解决方案不起作用,但使用前瞻技巧,正则表达式简单地变为:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
【讨论】:
^[\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]*$
【讨论】:
^[0-9]*[A-Za-z][0-9A-Za-z]*$
是正则表达式,它会做你所追求的。 ^ 和 $ 匹配单词的开头和结尾以防止其他字符。你可以用 \w 替换 [0-9A-z] 块,但我更喜欢更详细的形式,因为如果你愿意,它更容易用其他字符进行扩展。
按照 MSDN 上的教程将正则表达式验证器添加到您的 asp.net 页面:http://msdn.microsoft.com/en-us/library/ms998267.aspx。
【讨论】:
^\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]*$
【讨论】:
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$
可以
【讨论】: