C#编写匹配eq、bt等条件操作数字符串的正则表达式求助
C# 操作符表达式校验正则解决方案
原有正则的问题
- 正则内多余的空格会被识别为匹配规则,要求操作符、冒号前后必须存在空格,不符合实际输入格式
\w是多余规则,会额外匹配操作符后的任意字母/数字/下划线,不符合固定操作符的校验要求- 没有区分bt和其他操作符的规则,无法限制非bt操作符出现范围格式
- 没有加结束限定符
$,会导致后面接任意非法字符也能匹配通过,比如eq:5***也会被误判为合法
最终可用正则
C# 逐字字符串写法:@"^(?:(eq|ne|gt|lt|ge|le|ct):\d+|bt:\d+-\d+)$"
规则说明
^匹配字符串开始,$匹配字符串结束,确保整个字符串完全符合规则,不会出现前后多余的非法字符- 第一分支
(eq|ne|gt|lt|ge|le|ct):\d+匹配非bt的操作符,后面只允许跟冒号加纯数字,不允许出现减号等其他字符 - 第二分支
bt:\d+-\d+$匹配bt操作符,后面固定为「数字-数字」的范围格式 - 如果你需要支持负数的操作数,可以把
\d+替换为-?\d+,即可匹配类似lt:-3、bt:-5-2这类格式 - 如果业务允许冒号前后存在空格,可将正则调整为
@"^(?:(eq|ne|gt|lt|ge|le|ct)\s*:\s*\d+|bt\s*:\s*\d+-\d+)$",\s*会匹配0到多个空白字符
C# 校验代码示例
using System; using System.Text.RegularExpressions; public class OperatorValidator { // 正则预编译,提升高频调用的性能 private static readonly Regex _operatorRegex = new Regex(@"^(?:(eq|ne|gt|lt|ge|le|ct):\d+|bt:\d+-\d+)$", RegexOptions.Compiled); public static bool Validate(string input) { if (string.IsNullOrWhiteSpace(input)) return false; return _operatorRegex.IsMatch(input); } } // 调用示例 // bool isValid1 = OperatorValidator.Validate("eq:5"); // 返回true // bool isValid2 = OperatorValidator.Validate("bt:8-9"); // 返回true // bool isValid3 = OperatorValidator.Validate("eq:4-6"); // 返回false // bool isValid4 = OperatorValidator.Validate("eq:**+4"); // 返回false
测试用例参考
- 合法输入:
eq:5、bt:8-9、ge:100、lt:0 - 非法输入:
eq:4-6、eq:**+4、bt:12、bt:a-3、ne: 12、gt:5x
内容的提问来源于stack exchange,提问作者Aԃιƚყα Gυɾαʋ
相关产品推荐
相关产品推荐

