为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
呼啦一阵风 2021-10-24 19:20:24
我正在尝试使用此正则表达式验证字符串var regexAgencia = new Regex("^(?!0000)([0-9]{4})");var result = regexAgencia.IsMatch(agencia);有效选项:N-XNN-XNNN-XNNNN-XNNN NNN NNNN无效选项:0-X 00-X 000-X 0000-X0000000000其中 N 是任何数字 0-9,X 可以是 X 或 0-9当我验证这个“014777417”时,正则表达式返回真我需要帮助编写一个正则表达式来使用此规则验证此字符串。
查看完整描述

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

这应该为你做:

^(?=\d*[1-9])\d{1,4}(?:-[X\d])?$

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


查看完整回答
反对 回复 2021-10-24
?
动漫人物

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]。


查看完整回答
反对 回复 2021-10-24
?
饮歌长啸

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

这样做的好处是将来更容易修改。


查看完整回答
反对 回复 2021-10-24
  • 3 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信