为何C#中验证纯数字的正则表达式对含字母字符串返回true?
问题分析与解决:正则验证仅数字的差异问题
嘿,这问题其实是因为ASP.NET的RegularExpressionValidator和C#里Regex.IsMatch的默认匹配规则不一样导致的,我给你拆解一下:
为什么你的代码返回true?
你用的正则@"[0-9]+"的意思是:字符串中存在至少一个连续的数字。所以当你传入"1234asdf"时,开头的"1234"满足这个条件,Regex.IsMatch就会返回true——它只要找到匹配的片段就会成功,不会检查整个字符串是不是全是数字。
为什么RegularExpressionValidator里验证正常?
而ASP.NET的RegularExpressionValidator默认会把正则表达式应用到整个输入字符串,相当于自动给你的正则加上了开头锚点^和结尾锚点$,也就是实际生效的是@"^[0-9]+$",这样就要求输入必须从开头到结尾全是数字,所以能正确验证。
怎么修改C#代码解决问题?
你只需要给正则加上^和$,强制匹配整个字符串:
var x = Regex.IsMatch("1234asdf", @"^[0-9]+$").ToString();
这样修改后:
- 传入
"1234"会返回"True",符合要求; - 传入
"1234asdf"会返回"False",达到你要的“仅包含数字”的验证效果。
另外,如果你想支持空字符串的情况(比如允许用户不输入内容),可以把+改成*,也就是@"^[0-9]*$";如果要求至少一个数字,就保持+就行。
内容的提问来源于stack exchange,提问作者Ram_P
相关产品推荐
相关产品推荐

