如何修改称呼匹配正则,强制Mr.等前缀后需跟空格及有效内容
解决方案
你可以直接替换原正则表达式为如下版本,同时修正了原表达式里.未转义会匹配任意字符的隐患:
[RegularExpression(@"^(?i)(Mr|Mrs|Ms|Dr)\.\s+\S.*$", ErrorMessage = "Greeting must begin with Mr., Mrs., Ms., or Dr. and be followed by a name.")] public string? Greeting { get; set; }
正则规则说明
(?i):内联不区分大小写修饰符,自动兼容大小写写法的前缀(比如MR.、MRS.都可以匹配,不需要手动列所有大小写组合)(Mr|Mrs|Ms|Dr)\.:严格匹配指定前缀加英文点,\.转义后确保只会匹配真实的英文句号,不会像原表达式那样匹配任意字符\s+:强制前缀后至少有1个空白字符(如果只允许半角空格,可直接替换为半角空格即可)\S.*:强制空白字符后至少有1个非空白有效字符,后面可以跟任意内容(支持多字姓名)^和$:分别匹配字符串开头和结尾,确保整个输入完全符合规则
如果不需要兼容任意大小写写法,只想匹配你列出的8种固定大小写的前缀,可改用如下正则:@"^(Mr\.|MR\.|Mrs\.|MRS\.|Ms\.|MS\.|Dr\.|DR\.)\s+\S.*$"
校验效果完全符合要求
- 合法输入示例:
Mr. Joe Doe、Mr. Joe、DR. Brown - 非法输入示例:
Mr.、Mr.、Mr.Joe(点后无空格)
内容的提问来源于stack exchange,提问作者kuka muk
相关产品推荐
相关产品推荐

