验证邮箱/手机号时遇正则报错:Quantifier {x,y} following nothing 求助
解决正则表达式的Quantifier异常问题
我一眼就看出你遇到的问题了——你的正则表达式写法犯了一个很常见的量词使用错误!
错误原因分析
报错信息里的Quantifier {x,y} following nothing意思是:你用了量词{2},但这个量词前面没有任何要重复匹配的元素。看你写的"{2}[0-9]-{3}[0-9]",这里的{2}是飘在半空的,正则引擎完全不知道你要重复什么内容,自然就抛出异常了。
看起来你应该是想匹配「2位数字 + 连字符 + 3位数字」的格式(比如邮编或者手机号片段),那正确的写法应该是把量词放到要重复的元素后面。
修正后的代码
把你的正则表达式改成这样:
public class Order { // 修正后的正则:匹配2位数字-3位数字,加上起止符确保完全匹配 public string ZipCodeValidationPattern = @"^\d{2}-\d{3}$"; public string ZipCode { get; set; } public string PhoneNumber { get; set; } private void SetZipCode(string zipCode) { // 用修正后的正则做验证 if (System.Text.RegularExpressions.Regex.IsMatch(zipCode, ZipCodeValidationPattern)) { ZipCode = zipCode; } else { throw new ArgumentException("Invalid zip code format"); } } }
补充说明
\d是正则里匹配数字的简写,和[0-9]效果完全一致,写起来更简洁- 加上
^(字符串开头)和$(字符串结尾)可以避免部分匹配的问题,比如不会把123-4567里的23-456误判为有效格式 - 在C#里写正则字符串时,建议加上
@符号避免转义问题(虽然这里\d不加@也能识别,但养成好习惯总是没错的)
内容的提问来源于stack exchange,提问作者Karol Pisarzewski
相关产品推荐
相关产品推荐

