You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET RegularExpression数据注解匹配异常:多单词输入验证失败

问题解答

问题根源

你遇到的验证失败问题,核心出在两个细节上:

  1. 未锚定整个字符串:.NET的RegularExpressionAttribute默认只检查输入中是否存在匹配正则的子串,而非要求整个字符串完全符合规则。原正则没有^(开头)和$(结尾)锚点,导致正则无法约束整个输入内容,当输入多单词时,无法确保全部内容都符合规则。
  2. 非贪婪量词导致匹配不完整:原正则中的+?是非贪婪匹配,会尽可能少地匹配内容。比如输入This is时,正则可能只匹配This或This 就停止,无法覆盖整个字符串,进而触发验证失败。

修正后的正则注解

替换为以下正则即可满足所有规则:

[RegularExpression(@"^[a-zA-Z0-9]+(?: [a-zA-Z0-9]+)*$", ErrorMessage = "产品名称只能包含字母、数字,且单词之间最多一个空格")]

正则规则拆解

  • ^:锁定字符串开头,确保第一个字符是字母/数字,且开头无空格
  • [a-zA-Z0-9]+:匹配第一个由字母或数字组成的单词(至少1个字符,避免空输入)
  • (?: [a-zA-Z0-9]+)*:非捕获组,用于匹配"单个空格+字母数字单词"的组合:
    • ?: 表示不捕获该组,提升匹配性能
    • * 允许该组重复0次或多次(支持单个单词、多个单词的场景,同时保证单词间最多一个空格)
  • $:锁定字符串结尾,确保最后一个字符是字母/数字,且末尾无空格

验证效果

  • 有效输入如This is good 123、123 this 555 good:正则会完整匹配整个字符串,验证通过
  • 无效输入如This is not good (多空格、末尾空格)、this $%^&* is not good(含非法字符):正则无法匹配整个字符串,验证失败

内容的提问来源于stack exchange,提问作者David.Warwick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:20:55