You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:55:10