C#中仅允许数字与逗号的正则表达式问题求助
解决C# Regex.IsMatch验证数字与逗号格式的问题
嘿,我知道问题出在哪了!你原来的正则表达式没有锚定整个字符串,所以只要目标字符串里存在符合规则的片段,Regex.IsMatch就会返回true——哪怕字符串里混着字母也一样。比如"a123,456"这种包含字母的字符串,因为里面有"123,456"这个符合你正则的子串,所以会被错误判定为合法。
修正后的正则表达式
要解决这个问题,你需要给正则加上字符串开始锚点^和结束锚点$,强制要求整个字符串完全匹配规则。修正后的正则是:
^[0-9]+(,[0-9]+)*,?$
正则各部分解释
^:匹配字符串的起始位置[0-9]+:匹配至少一个阿拉伯数字(,[0-9]+)*:匹配零个或多个「逗号+至少一个数字」的组合,支持多段数字用逗号分隔,?:匹配可选的结尾逗号(对应你需要的123,456,格式)$:匹配字符串的结束位置
C# 代码示例
using System.Text.RegularExpressions; // 测试用例 string validCase1 = "123,456"; string validCase2 = "123,456,"; string invalidCase = "123a,456"; // 包含字母的无效字符串 // 验证结果 bool isValid1 = Regex.IsMatch(validCase1, @"^[0-9]+(,[0-9]+)*,?$"); // 返回 true bool isValid2 = Regex.IsMatch(validCase2, @"^[0-9]+(,[0-9]+)*,?$"); // 返回 true bool isValid3 = Regex.IsMatch(invalidCase, @"^[0-9]+(,[0-9]+)*,?$"); // 返回 false
额外说明
如果你想简化数字的写法,也可以用\d代替[0-9],不过[0-9]更明确,只会匹配阿拉伯数字;而\d在某些文化区域下可能匹配其他 Unicode 数字字符,根据你的需求选择即可。
内容的提问来源于stack exchange,提问作者Mayank
相关产品推荐
相关产品推荐

