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 關注
- 254 瀏覽
添加回答
舉報