我需要使用正则表达式验证字符串,该正则表达式只能包含带有范围的撇号,空格和连字符的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;
}
}
答案 0 :(得分:3)
您最后需要$
或\z
锚点,无需转义使用Regex.Escape
转义的符号:
string stringValid = @"^[a-zA-Z0-9 '-]{" + minLength + "," + maxLength + "}$";
请注意,您不必转义连字符,因为它位于字符类的末尾(在结束]
之前)。 '
不是特殊字符,不必转义。
如果您需要确保字符串仅由这些符号组成且没有尾随换行符,请使用\z
锚点而不是$
(在字符串末尾或字符串末尾匹配)就在字符串中的最后一个\n
之前。