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

MVC表单客户端正则校验:支持含特殊字母的多词输入需求

解决MVC姓名输入的Unicode正则校验问题

我来帮你搞定这个姓名校验的问题!你的核心需求是让输入框支持包含åäö在内的所有Unicode字母,同时确保用户输入至少两个单词对吧?

首先,你之前的尝试有两个关键问题:

  1. 第一个正则只限定了ASCII字母(A-Za-z),自然无法匹配åäö这类特殊字符;
  2. 第二个正则用了\w,但在.NET的正则引擎里,默认\w只包含A-Za-z0-9_,同样不支持Unicode字母,而且逻辑上还允许空单词或者前后空格,不符合你的校验要求。

正确的正则表达式方案

直接使用.NET正则支持的Unicode字母类\p{L},它能匹配任意语言的字母(包括åäö、é、ñ等),然后构造确保至少两个单词的规则:

[Required(ErrorMessage = "Du måste fylla i ditt namn"), 
 RegularExpression(@"^[\p{L}]+(?:\s+[\p{L}]+)+$", ErrorMessage = "Du måste skriva både för- och efternamn"), 
 Display(Name = "Namn")]
public string Name { get; set; }

正则逻辑解释

  • ^:匹配字符串开头,确保没有前置空格
  • [\p{L}]+:匹配一个或多个Unicode字母(构成第一个单词)
  • (?:\s+[\p{L}]+)+:非捕获组,匹配「一个或多个空格 + 一个或多个Unicode字母」的组合,并且这个组合至少出现一次(保证至少有第二个单词)
  • $:匹配字符串结尾,确保没有后置空格

测试你的用例

  • "Olle Svensson" → 完全匹配,通过校验
  • "Åsa Äng" → Å、Ä都属于\p{L},匹配通过
  • "Sören Höre" → ö、ö同样被识别,通过校验
  • "Olle " → 结尾是空格,不满足$前的字母要求,不通过
  • "Åsa" → 只有一个单词,不满足至少两个的要求,不通过

额外补充(可选)

如果你的业务需要支持带连字符的姓名(比如"Anna-Maria Eriksson"),可以把正则调整为:

RegularExpression(@"^[\p{L}-]+(?:\s+[\p{L}-]+)+$", ...)

这样连字符也会被允许作为姓名的一部分。

内容的提问来源于stack exchange,提问作者Tomas0910

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:48:28