C#正则表达式:如何通过ViewModel的RegularExpression属性实现5个不含o/i(大小写)的字母数字字符验证
搞定C#正则表达式:5位字母数字且排除i/o(大小写)
嘿,不用写自定义验证函数,把两个规则整合到一个正则里就搞定了!你需要的表达式是:
@"^[a-hj-np-zA-HJ-NP-Z0-9]{5}$"
拆解一下这个正则的逻辑:
^和$锚定整个字符串,确保输入正好是5个字符(不会多也不会少)- 字符集
[a-hj-np-zA-HJ-NP-Z0-9]精准过滤了i和o:- 小写部分:
a-h(跳过i)、j-n(跳过o)、p-z(剩下的小写字母) - 大写部分:
A-H(跳过I)、J-N(跳过O)、P-Z(剩下的大写字母) 0-9:保留所有数字
- 小写部分:
直接把它用到你的ViewModel属性上就行,完整代码示例:
using System.ComponentModel.DataAnnotations; public class YourViewModel { [RegularExpression(@"^[a-hj-np-zA-HJ-NP-Z0-9]{5}$", ErrorMessage = "*It must contain 5 letters or numbers, no 'i'/'I' or 'o'/'O'.")] public string TargetProperty { get; set; } }
为啥之前的写法不生效?
- 你第一个表达式
[a-zA-Z0-9]{5}虽然限定了长度和字符类型,但没排除i/o;而且要注意,RegularExpression特性默认要求匹配整个字符串,但字符集不对的话还是过不了 - 第二个表达式
[^ioIO]只是排除了特定字符,但没限定长度,而且如果不加锚点的话,只要输入里有一个字符不是i/o就会匹配,完全不符合“正好5个有效字符”的要求
这样整合之后,就同时满足了所有规则:必须5位,只能是字母数字,绝对不含大小写的i和o。
内容的提问来源于stack exchange,提问作者Monk
相关产品推荐
相关产品推荐

