【问题标题】:Regular Expression in C#C#中的正则表达式
【发布时间】:2012-01-23 10:13:36
【问题描述】:

我需要验证输入,例如 en-US 或 en-us 或 ar-AE 我在网上搜索过,发现很难理解并在长度不超过 5 个字符且不区分大小写的字符串上创建一个正则表达式。

我创建了一个[a-z][a-z][-][a-z][a-z] 这个工作正常,但它不检查长度 它也会匹配 en-USXYZ

问候

【问题讨论】:

  • 如果您要匹配文化,请注意并非所有文化都是两个两个字母的部分。有一些有。例如,一些中国文化偏离了这一点(例如zh-Hans- Chinese (Simplified))。此外,某些文化包含三个部分,例如sr-Cyrl-BA - 塞尔维亚语、西里尔字母(波斯尼亚和黑塞哥维那)

标签: c# asp.net .net regex


【解决方案1】:

这就是锚点的用途:

(?i)^[a-z]{2}-[a-z]{2}$

编译正则表达式时也可以设置不区分大小写的选项(?i)

Regex regexObj = new Regex("^[a-z]{2}-[a-z]{2}$", RegexOptions.IgnoreCase);

【讨论】:

    【解决方案2】:

    使用这样的一个:

    ^[a-z]{2}-[a-z]{2}$
    

    【讨论】:

      【解决方案3】:

      试试这个:

      ^[a-z][a-z][-][a-z][a-z]$
      

      【讨论】:

        【解决方案4】:

        使用这个正则表达式:

        ^[a-z]{2}-[a-z]{2}$
        

        【讨论】:

          【解决方案5】:

          您使用^$ 指定字符串的开始和结束。

          ^[a-z][a-z]-[a-z][a-z]$
          

          或使用乘数:

          ^[a-z]{2}-[a-z]{2}$
          

          您还必须为大写字符包含 A-Z 间隔,除非您已为 Regex 对象指定不区分大小写:

          ^[A-Za-z]{2}-[A-Za-z]{2}$
          

          【讨论】:

            【解决方案6】:

            你应该在你的表达中使用锚点:

            ^[a-z][a-z][-][a-z][a-z]$
            

            【讨论】:

              【解决方案7】:

              \w{2}[-]\w{2} 应该可以解决问题:

              \w -> 字符
              {2} -> 精确 2 次​​p>

              编辑:\w 也允许编号所以[a-z]{2}[-][a-zA-Z]{2}

              【讨论】:

              • 它也匹配 en-USassd,但它应该在这种情况下失败,它不检查字符串的长度
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多