C#正则表达式修改需求:首尾为字母数字,中间最多1个连字符
正则表达式修改方案
针对你的需求,修改后的正则表达式如下:
^(?:[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)?|)$
规则拆解
^和$锁定字符串首尾,确保整串完全匹配规则- 整体分为两个可选分支:
- 非空字符串分支:
[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)?[a-zA-Z0-9]+:匹配至少1个字母数字,保证字符串开头是字母数字(?:-[a-zA-Z0-9]+)?:可选子分支,匹配1个连字符+至少1个字母数字,确保最多只有1个连字符且连字符前后都是字母数字
- 空字符串分支:
|),直接匹配空串,满足有效值中的空字符串需求
- 非空字符串分支:
示例验证
有效值匹配情况
A/1A/12:匹配非空分支的[a-zA-Z0-9]+部分A-B:匹配完整的非空分支"":匹配空字符串分支
无效值不匹配原因
-A:开头为连字符,不符合非空分支的开头要求B2-:结尾为连字符,非空分支要求连字符后必须跟字母数字A--B:包含两个连字符,超出最多1个的限制#12:开头为非字母数字字符,不符合开头要求
C# 中使用示例
using System.Text.RegularExpressions; bool IsValid(string input) { return Regex.IsMatch(input, @"^(?:[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)?|)$"); }
内容的提问来源于stack exchange,提问作者MG3478291
相关产品推荐
相关产品推荐

