C# .Net 正则表达式如何仅拒绝完全由#@%组成的字符串?
你原有正则的问题
你写的^(?!(#|@|%)+$)只包含负向先行断言,仅匹配「字符串开头后面不全是#@%」的位置,没有匹配完整输入字符串。.NET数据注解的RegularExpressionAttribute要求正则完全匹配整个输入字符串才会判定校验通过,因此你的写法无法覆盖整串匹配逻辑,达不到预期效果。
可直接用于数据注解的正则表达式
^(?!([#@%])+$).*$
规则拆解
^匹配字符串开头(?!([#@%])+$)负向先行断言:校验整个字符串不能仅由#、@、%三个字符任意组合构成.*匹配任意数量的任意字符(含空串)$匹配字符串结尾
校验结果验证
ab#c→ 匹配成功(允许)abc#@→ 匹配成功(允许)#%abc→ 匹配成功(允许)#@%→ 匹配失败(拒绝)##@→ 匹配失败(拒绝)
如果你的业务不允许输入空串,可将正则调整为^(?!([#@%])+$).+$即可。
内容的提问来源于stack exchange,提问作者wickjon
相关产品推荐
相关产品推荐

