如何获取正则表达式来检查字符串是否只包含字母字符[a-z]或[A-Z]?

时间:2009-06-13 09:12:13

标签: c# asp.net regex verification

我正在尝试创建一个正则表达式来验证给定的字符串只有字母a-z或A-Z。该字符串最长可达25个字母。 (我不确定正则表达式是否可以检查字符串的长度)

示例:
1。 "abcdef" = true;
2。 "a2bdef" = false;
3。 "333" = false;
4。 "j" = true;
5。 "aaaaaaaaaaaaaaaaaaaaaaaaaa" = false; // 26封信

这是我到目前为止所做的......虽然不知道它有什么问题

Regex alphaPattern = new Regex("[^a-z]|[^A-Z]");

我认为这意味着该字符串只能包含来自a-z的大写或小写字母,但当我将其与所有字母的字符串匹配时,它会返回false ...

此外,任何有关使用正则表达式与其他验证方法的效率的建议都将受到高度赞赏。

7 个答案:

答案 0 :(得分:36)

Regex lettersOnly = new Regex("^[a-zA-Z]{1,25}$");
  • ^表示“在字符串开头处开始匹配”
  • [a-zA-Z]表示“匹配小写字母和大写字母a-z”
  • {1,25}表示“匹配上一个项目(字符类,见上文)1到25次”
  • $表示“仅匹配光标位于字符串末尾”

答案 1 :(得分:17)

答案 2 :(得分:6)

  

该字符串最长可达25个字母。   (我不确定正则表达式是否可以检查字符串的长度)

正则表达式可以检查字符串的长度 - 从其他人发布的答案中可以看出。

但是,当您验证用户输入(例如,用户名)时,我会建议您单独进行检查。

问题是,正则表达式只能告诉你字符串是否与之匹配。它不会告诉它为什么不匹配。文本太长还是包含不允许的字符 - 你无法分辨。当一个程序说:“提供的用户名包含无效字符或太长”时,它远非友好。相反,您应该为不同的情况提供单独的错误消息。

答案 3 :(得分:5)

/// <summary>
/// Checks if string contains only letters a-z and A-Z and should not be more than 25 characters in length
/// </summary>
/// <param name="value">String to be matched</param>
/// <returns>True if matches, false otherwise</returns>
public static bool IsValidString(string value)
{
    string pattern = @"^[a-zA-Z]{1,25}$";
    return Regex.IsMatch(value, pattern);
}

答案 4 :(得分:4)

您正在使用的正则表达式是[^a-z][^A-Z]的替代。表达式[^…]意味着匹配除字符集中描述的字符以外的任何字符。

总的来说,您的表达方式意味着匹配a-z以外的任何单个字符或A-Z以外的其他字符。

但您需要一个仅与a-zA-Z匹配的正则表达式:

[a-zA-Z]

要指定长度,请使用字符串的开头(^)和结束($)锚定表达式,并使用{ 描述长度n , m }量词,至少意味着 n 但不是超过 m 重复:

^[a-zA-Z]{0,25}$

答案 5 :(得分:1)

我是否正确理解它只能包含 大写小写字母?

new Regex("^([a-z]{1,25}|[A-Z]{1,25})$")

在这种情况下使用正则表达式似乎是正确的。

顺便说一句,字符类中第一个位置的插入符号(“^”)表示“不”,所以“[^a-z]|[^A-Z]”表示“不是任何小写字母,或者不是任何大写字母” (无视az不是所有字母)。

答案 6 :(得分:1)

有很好的交互式工具可用于开发和测试正则表达式:

他们是一个很好的帮助,因为他们会立即告诉你,如果你的表达能够按预期工作,甚至允许你单步调试。