正则表达式:单个单词

时间:2011-10-10 13:25:03

标签: c# .net regex

如果用户输入是单个单词,我想检查C#程序。我这个词只有字符A-Z和a-z。没有空格或其他字符。 我试试[A-Za-z]*,但这不起作用。这个表达有什么问题?

Regex regex = new Regex("[A-Za-z]*");
if (!regex.IsMatch(userinput);)
{
  ...
}

您是否可以使用正则表达式列表来推荐网站?!

9 个答案:

答案 0 :(得分:14)

它可能有效,但你没有锚定正则表达式。您需要使用^$将表达式分别锚定到字符串的开头和结尾:

Regex regex = new Regex("^[A-Za-z]+$");

我还将*更改为+,因为*将匹配0次或更多次,而+将匹配1次或更多次。

答案 1 :(得分:5)

您应该为字符串的开头和结尾添加锚点:^[A-Za-z]+$

答案 2 :(得分:4)

关于正则表达式的问题,请看http://regexlib.com/

对于正则表达式,请查看特殊字符^$,它们表示字符串的开头和结尾。 This site在将来构建正则表达式时会派上用场。

答案 3 :(得分:2)

正则表达式中的星号字符指定“前面的字符类中的零个或多个”。

这解释了为什么表达式失败,因为如果字符串包含零个或多个字母,它将会成功。

您可能希望拥有一个或多个字母,在这种情况下,您应该使用加号而不是星号。

进行了更改后,如果输入的字符串不包含任何字母,现在就会失败。

然而,这仍然不适合你,因为它将允许字符串中的其他字符。如果您想将其限制为字母,而不是其他内容,那么您需要在正则表达式中提供开始和结束锚点(^$)以使其成为表达式检查“一个或多个字母”是否附加到字符串的开头和结尾。

^[a-zA-Z]+$

这应该按预期工作。

希望有所帮助。

有关正则表达式的更多信息,我建议http://www.regular-expressions.info/reference.html作为一个很好的参考站点。

答案 4 :(得分:1)

我不知道C#的正则表达式语法是什么,但请尝试[A-Za-z]+

答案 5 :(得分:1)

尝试^[A-Za-z]+$如果您不包含^$,它将匹配字符串中包含字母字符的任何部分。

答案 6 :(得分:1)

我知道这个问题只是关于严格的字母输入,但这是一个解决这个问题的有趣方法,它不会破坏重音字母和其他特殊字符。

正则表达式" ^ \ b。+?\ b"将匹配字符串开头的第一个单词,但如果字符串实际上以有效单词字符开头,则。使用它,你可以简单地检查A)字符串匹配,B)匹配字符串的长度是否等于你的完整字符串的长度:

public Boolean IsSingleWord(String userInput)
{
    Regex firstWordRegex = new Regex("^\\b.+?\\b");
    Match firstWordMatch = firstWordRegex.Match(userInput);
    return firstWordMatch.Success && firstWordMatch.Length == userInput.Length;
}

答案 7 :(得分:0)

其他人已经写了如何解决你所知道的问题。现在我将谈谈您可能不知道的问题:变音符号:-)您的解决方案不支持àèéìòù和许多其他字母。一个正确的解决方案是:

^(\p{L}\p{M}*)+$

其中\p{L}是任何字母加\p{M}*,其为0或更多变音符号(在unicode变音符号中可以与基本字母“分开”,因此您可以使用a + ` = à或您可以使用标准à

等预组合字符

答案 8 :(得分:0)

如果您只需要字符a-zA-Z,您可以简单地遍历字符并比较单个字符(如果它们在您的范围内)

例如: 对于每个字符c:('a'< = c&& c< ='z')|| ('A'< = c&& c< ='Z')

这可以提高你的表现