使用正则表达式验证字符串

时间:2018-07-24 10:32:13

标签: c# regex

我正在尝试使用此正则表达式验证字符串

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

我需要编写正则表达式以使用此规则验证此字符串的帮助。

3 个答案:

答案 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])

See it here at regex101

答案 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

这具有将来更容易修改的优点。