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

C#中手机号格式化及必填校验失效问题排查

问题分析与解决方案

核心问题1:值类型导致[Required]不生效

int是值类型,默认值为0。即便用户未输入手机号,模型绑定会自动把MobileNumber设为0,此时[Required]属性不会触发验证——因为0是有效的int值,并非null。

核心问题2:int类型不适合存储手机号

手机号可能包含前导零,且常规长度(如11位)远超int的最大值(2147483647),用int存储会导致数据溢出或丢失前导零,完全不符合业务需求。

核心问题3:[DisplayFormat]不做输入验证

[DisplayFormat]仅用于数据显示格式化,无法验证用户输入的格式是否符合要求。


修复代码

将字段类型改为string,配合[Required]、[RegularExpression]实现完整验证:

[Required(ErrorMessage = "请输入有效的手机号码")]
[RegularExpression(@"^1[3-9]\d{9}$", ErrorMessage = "手机号码格式不正确")]
public string MobileNumber { get; set; }

如果需要匹配你示例中的940-05#-#######格式,可调整正则表达式:

[RegularExpression(@"^\d{3}-\d{2}\d-\d{7}$", ErrorMessage = "请按照XXX-XX#-XXXXXXX格式输入手机号")]

额外说明

  • 若要在显示时自动格式化手机号,可保留[DisplayFormat],并按需设置ApplyFormatInEditMode:
    [DisplayFormat(DataFormatString = "{0:000-00#-0000000}", ApplyFormatInEditMode = false)]
    
  • 数据库端需同步将字段类型改为varchar或nvarchar,长度设为合适值(如15,兼容带分隔符的格式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:35:35