public static bool ValidatorCardId(String strCardId)
{
string reg = @"\d{17}[\d|X]|\d{15}";
return ExecuteValidator(strCardId, reg);
} private static bool ExecuteValidator(string str, string Expression)
{
try
{
Regex r = new Regex(Expression);//创建正则表达式。
return r.Match(str).Success;//进行验证。
}
catch (Exception e)
{ log4net.LogManager.GetLogger(e.GetType()).Error("Validator(" +str + ")", e);
return false;
}
}这是两个中国身份证号码验证的 方法,为什么 16位,17位,都可以成功通过验证??是不是微软自带的@"\d{17}[\d|X]|\d{15}" 这个正则表示有问题?正则高手来帮帮忙看看,欢迎大家各抒己见。。
{
string reg = @"\d{17}[\d|X]|\d{15}";
return ExecuteValidator(strCardId, reg);
} private static bool ExecuteValidator(string str, string Expression)
{
try
{
Regex r = new Regex(Expression);//创建正则表达式。
return r.Match(str).Success;//进行验证。
}
catch (Exception e)
{ log4net.LogManager.GetLogger(e.GetType()).Error("Validator(" +str + ")", e);
return false;
}
}这是两个中国身份证号码验证的 方法,为什么 16位,17位,都可以成功通过验证??是不是微软自带的@"\d{17}[\d|X]|\d{15}" 这个正则表示有问题?正则高手来帮帮忙看看,欢迎大家各抒己见。。
解读一下这个正则\d 匹配任意一位数字
{17} 十七位的
[\d|X]
第十八位是数字或者X
|\d{15}
或者是 十五位的数字怎么可能会出现 楼主所说的 可以匹配 16位 17位的情况!!!!
^(\d{17}[\d|X]|\d{15})$这样
都是我的错,我改成^(\d{18}[\d|X]|\d{15})$了
^\d{17}[\d|X]
或者
\d{15}$
^(\d{17}[\d|X]|\d{15})$
很明显理解错了。
[\d|X]
表示数字、大写X或是|字符。这里的|并不是或的意思。