我正在尝试使用此正则表达式验证字符串
var regexAgencia = new Regex("^(?!0000)([0-9]{4})");
var result = regexAgencia.IsMatch(agencia);
有效选项:
N-X
NN-X
NNN-X
NNNN-X
N
NN
NNN
NNNN
无效的选项:
0-X
00-X
000-X
0000-X
0
00
000
0000
其中N是0-9的任意数字,并且X可以是X或0-9
当我验证此“ 014777417”时,正则表达式返回true
我需要编写正则表达式以使用此规则验证此字符串的帮助。
答案 0 :(得分:2)
这应该为您做到:
let sortedCities = cityData.cities.sorted(by: {$0.name.localizedStandardCompare($1.name) == .orderedAscending })
首先要积极看待,以确保存在非零的数字(^(?=\d*[1-9])\d{1,4}(?:-[X\d])?$
)。此后,它匹配1-4位数字,并可选地后面跟连字符和数字或(?=\d*[1-9])
。
答案 1 :(得分:0)
您当然可以只通过Regex来做到这一点,但是,我一直对创建以下代码感到this绕:
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]
。
答案 2 :(得分:0)
进行两种测试会更容易:一种检查其是否有效,另一种则排除所有前导零均无效的特殊情况:
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
这具有将来更容易修改的优点。