适用于A-Za-z0-9撇号,空格和连字符的RegEx,范围为

时间:2016-04-01 14:37:41

标签: c# regex

我需要使用正则表达式验证字符串,该正则表达式只能包含带有范围的撇号,空格和连字符的A-Za-z0-9。我试过用以下方法做这件事无济于事。我做错了什么?

这应该验证O' Neil,von-studder,vons studder,如果范围大于20个字符或者包含A-Za-z0-9以外的字符撇号,空格和连字符,则会失败。

public static bool ValidLdapSearchString(string input, int minLength, int maxLength)
{
    try
    {
        string stringValid = @"^[a-zA-Z0-9 " + Regex.Escape("'-") + "]{" + minLength + "," + maxLength + "}";
        Regex regEx = new Regex(stringValid);

        if (!string.IsNullOrEmpty(input) && regEx.IsMatch(input))
        {
            return true;
        }

        return false;
    }
    catch
    {
        throw;
    }
}

1 个答案:

答案 0 :(得分:3)

您最后需要$\z锚点,无需转义使用Regex.Escape转义的符号:

string stringValid = @"^[a-zA-Z0-9 '-]{" + minLength + "," + maxLength + "}$";

请参阅.NET regex demo

请注意,您不必转义连字符,因为它位于字符类的末尾(在结束]之前)。 '不是特殊字符,不必转义。

如果您需要确保字符串仅由这些符号组成且没有尾随换行符,请使用\z锚点而不是$(在字符串末尾或字符串末尾匹配)就在字符串中的最后一个\n之前。