猿问

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

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


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”时,正则表达式返回真


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


呼啦一阵风
浏览 217回答 3
3回答

qq_花开花谢_0

这应该为你做:^(?=\d*[1-9])\d{1,4}(?:-[X\d])?$它从正面展望开始,以确保存在除零以外的数字 ( (?=\d*[1-9]))。此后它匹配 1-4 位数字,可选后跟一个连字符和一个数字 or X。

动漫人物

你当然可以只通过 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]。

饮歌长啸

有两个测试会更容易:一个检查它是否有效,然后一个排除所有前导零无效的特殊情况: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();}输出: False1234-5 True0-9 False014777417 False0000 False1-23 False01-0 True1-234 abcd False0123-4 True这样做的好处是将来更容易修改。
随时随地看视频慕课网APP
我要回答