C# Regex禁止空格验证报错:RegexParseException无效模式排查
问题解决:正则表达式无效模式错误
你的noSpaces正则表达式语法写错了,导致解析失败。负向先行断言的正确语法是(?!pattern),你漏了开头的左括号,所以?!.* 是非法的正则模式。
修正后的代码
var noSpaces = new Regex(@"(?!.* )"); var hasNum = new Regex(@"[0-9]+"); var isValid = noSpaces.IsMatch(input) && hasNum.IsMatch(input);
语法解释
(?!.* ):这是负向先行断言,作用是检查字符串中不存在"任意字符(包括0个)+空格"的组合,也就是确保密码里没有任何空格。[0-9]+:匹配至少一个数字,保证密码包含数字。
额外优化建议
如果只是单次匹配,用Regex.IsMatch静态方法更高效,不用实例化Regex对象:
var noSpaces = Regex.IsMatch(input, @"(?!.* )"); var hasNum = Regex.IsMatch(input, @"[0-9]+"); var isValid = noSpaces && hasNum;
也可以把两个规则合并成一个正则,减少匹配次数:
var isValid = Regex.IsMatch(input, @"^(?=.*[0-9])(?!.* ).+$");
这个合并后的正则解释:
^:匹配字符串开头(?=.*[0-9]):正向先行断言,确保包含至少一个数字(?!.* ):负向先行断言,确保没有空格.+$:匹配至少一个任意字符(保证密码非空)
内容的提问来源于stack exchange,提问作者elizac
相关产品推荐
相关产品推荐

