3 回答
TA贡献1835条经验 获得超7个赞
这应该为你做:
^(?=\d*[1-9])\d{1,4}(?:-[X\d])?$
它从正面展望开始,以确保存在除零以外的数字 ( (?=\d*[1-9])
)。此后它匹配 1-4 位数字,可选后跟一个连字符和一个数字 or X
。
TA贡献1815条经验 获得超10个赞
你当然可以只通过 Regex 来做到这一点,但是,我总是对创建以下代码有一种挥之不去的恐惧:
1) 只有我明白或记得 2) 回想起来连我都不明白
本着这种精神,似乎如果你做一个简单的拆分,你的字符串可能更容易评估:
string[] parts = agencia.Split('-');
if ((parts.Length == 1 && Regex.IsMatch(agencia, @"^\d{1,4}$")) ||
(parts.Length == 2 && Regex.IsMatch(parts[0], @"^\d{1,4}$")) &&
Regex.IsMatch(parts[1], @"^[0-9X]$"))
{
}
- 编辑 -
我不知道您是否想要 0,所以如果您不想要,请\d从更改为[1-9]。
TA贡献1951条经验 获得超3个赞
有两个测试会更容易:一个检查它是否有效,然后一个排除所有前导零无效的特殊情况:
static void Main(string[] args)
{
string[] agencias = { "", "1234-5", "0-9", "014777417", "0000", "1-23", "01-0", "1-234 abcd", "0123-4" };
var regexAgenciaValid = new Regex("^(([0-9]{1,4})(-[0-9])?)$");
var regexAgenciaInvalid = new Regex("^((0{1,4})(-[0-9])?)$");
foreach (string agencia in agencias)
{
var result = regexAgenciaValid.IsMatch(agencia) && !regexAgenciaInvalid.IsMatch(agencia);
Console.WriteLine(agencia + " " + result);
}
Console.ReadLine();
}
输出:
False
1234-5 True
0-9 False
014777417 False
0000 False
1-23 False
01-0 True
1-234 abcd False
0123-4 True
这样做的好处是将来更容易修改。
- 3 回答
- 0 关注
- 216 浏览
添加回答
举报