【问题标题】:Regex to allow some special characters c#正则表达式允许一些特殊字符 c#
【发布时间】:2015-08-26 09:19:40
【问题描述】:

我必须检查一个字符串是否包含特殊字符,但我可以在其中允许这 5 个特殊字符.()_-

我把我的正则表达式写成

var specialCharacterSet = "^[()_-.]";
var test = Regex.Match("a!", specialCharacterSet);
var isValid = test.Success;

但它抛出一个:

解析“^[()_-.]”时出错 - [x-y] 范围倒序。

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    您使用- 指定了一个范围。放在最后:

    [()_.-]
    

    否则范围不正确:下界符号_在字符表中出现的时间比上界符号.晚:

    此外,如果您打算检查字符串中的 任何 个字符是否属于该集合,则应删除仅检查字符串开头的 ^

    要测试字符串是否符合某种模式,请使用Regex.IsMatch

    指示正则表达式是否在输入字符串中找到匹配项。

    var specialCharacterSet = "[()_.-]";
    var test = Regex.IsMatch("a!", specialCharacterSet);
    

    更新

    接受任何不包含五个字符的字符串值,您可以使用

    var str = "file.na*me";
    if (!Regex.IsMatch(str, @"[()_.-]"))
        Console.WriteLine(string.Format("{0}: Valid!", str));
    else
        Console.WriteLine(string.Format("{0}: Invalid!", str));
    

    IDEONE demo

    【讨论】:

    • 所以我的正则表达式应该是 var specialCharacterSet = "^[A-Za-z0-9()_.-]+$";允许字母数字和我提到的那 5 个特殊字符
    • 如果你打算匹配任何 Unicode 字母和数字,我建议使用\w,因为它匹配[\p{L}\p{N}_]^[\w().-]+$\p{N} 速记 Unicode 类别类匹配所有类型的数字,\p{L} 匹配任何类型的字母。
    • regex 应该接受任何不包含我提到的五个字符的字符串值。我认为我评论的上述正则表达式会做。如果不行,请告诉我
    • 我用上述要求的确切代码更新了答案。
    • 我用过这个,但它说这个“file.na*me”不应该在哪里
    【解决方案2】:

    您可以使用^[()_\-.]^[()_.-],如果您使用特殊字符,那么最好在任何特殊字符(用于正则表达式特殊字符)之前使用\

    【讨论】:

      【解决方案3】:
      [()_.-]
      

      在末尾保留-escape 以避免它形成无效范围。character class 内的- 形成一个范围。这里

      _ 是十进制 95

      . 是十进制的46

      所以它从95 to 46形成了一个无效范围

      【讨论】:

        【解决方案4】:
         var specialCharacterSet = "^[()_.-]";
                var test = Regex.IsMatch("a!", specialCharacterSet);
                Console.WriteLine(test);
                Console.ReadLine();
        

        【讨论】:

        • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将改善答案的长期性价值。
        【解决方案5】:

        就 C# 而言,最好的方法是 [()_\-\.],因为 .和 - 是正则表达式的保留字符。您需要在这些保留字符之前使用转义字符。

        【讨论】:

        • . 不是字符类中的特殊字符,- 在第一个或最后一个位置不需要转义。
        • 直到我把这些字符当作特殊字符处理后,我的程序才能工作。仅举个例子,您如何看待以下表达式? @"^([A-Za-z0-9&+().- ]*)$" 你认为它会允许用户输入 .和 - 字符作为输入?
        • 能否请您使用Visual Studio 2019 自己尝试一下。如果您成功允许用户进入。和 - 使用 @"^([A-Za-z0-9&+().- ]*)$" 的字符然后请在此处发布您的 c# 和 HTML 代码。以便像我这样的其他人可以学习。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多