1

我正在尝试使用正则表达式来检查字母,所以我使用了下面的方法。问题是,如果我在字母之前或之后有一个数字,则该数字将被忽略,什么也不会发生,这不是我想要做的。我正在尝试仅检查字母,所以如果我有任何其他字母,则会弹出错误消息。如果我只有字母它可以正常工作,如果我只有数字它也可以正常工作,问题是如果我有一个字母和一个数字它不能正常工作,除了一切正常。

Regex _regex = new Regex("[A-Z]");
Match Instruction_match = _regex.Match(Instruction_Seperator[1]);

if (!Instruction_match.Success) // "A," or "B," or "C,"...etc.
{
     Messagebox.show("Error, Please letters only");
}

请注意,Instruction_Seperator[1] 是通过文本框从用户那里获取的,其中用户必须只在字母之前或字母之后输入任何字母。你知道为什么我输入字母和数字时没有弹出消息框吗?

期待您的回复:)

我可以有一个特定的大小,如果用户超过弹出一个错误,例如,如果用户只允许输入 3 个拉丁字母而没有别的,正则表达式中是否有长度限制:)

4

4 回答 4

5

该模式将匹配任何包含大写拉丁字母的字符串;如果它碰巧包含任何其他字符,它们将被忽略。如果您想要在字符串包含大写拉丁字母时匹配的模式,您将需要使用 start ( ^) 和 end ( $) 锚点,以及+在字符类之后使用一个或多个量词 ( ),像这样:

^[A-Z]+$

最后,您的代码应如下所示:

Regex _regex = new Regex("^[A-Z]+$");
Match Instruction_match = _regex.Match(Instruction_Seperator[1]);

if (!Instruction_match.Success) // "A," or "B," or "C,"...etc.
{
     Messagebox.show("Error, Please letters only");
}

鉴于您对问题的更新以及您所做的其他一些评论,您可能需要使用以下更多模式:

  • ^[A-Z]{3}$- 此模式将精确匹配三个大写拉丁字符
  • ^[A-Z]{1,3}$- 此模式将匹配一个、两个或三个大写拉丁字符
  • ^[A-Z]([A-Z]{2})?$- 此模式将匹配一到三个大写拉丁字符
于 2013-06-14T15:23:32.957 回答
1

您使用的正则表达式[A-Z]仅匹配一个大写字母。用于[A-Z]+输入的任意长度的连续大写字母子字符串。使用^[A-Z]+$这意味着子字符串锚定在输入字符串的开始和结束位置。

于 2013-06-14T15:27:01.447 回答
1

Change your pattern to:

Regex _regex = new Regex("^[A-Z]+$");
于 2013-06-14T15:23:08.160 回答
0

我假设您只想匹配一个字母,因此在以下示例中唯一匹配的字符串是“D”,如果您想要任意数量的单词,请使用 ^[AZ]+$

var patterns = new string[] { "12ABC", "D", "A","AB","ABC","A2B3","A1BC", "A123", "123ABC12" };
var regex = new Regex(@"^[A-Z]{1,3}$");
foreach (var pattern in patterns)
{
    var isMatch = regex.Match(pattern);
    if (isMatch.Success)
    Console.WriteLine("Found Matching string {0}", pattern);
}

请查看修改后的代码,您问题的更改是在正则表达式模式中添加 {1,3},这意味着最多出现 3 次拉丁词。

于 2013-06-14T15:34:32.757 回答