我试图使用正则表达式来检查字母,所以我使用了以下方法。问题是,如果我在信件之前或之后有一个数字,那么这个数字就会被忽略而且没有任何反应,这不是我想要做的事情。我只是想检查字母,所以如果我还有其他字母,那么会弹出一条错误信息。如果我只有字母就可以正常工作,如果我只有数字它也可以正常工作,问题是如果我有一个字母和一个数字它确实工作正常,除此之外一切正常。
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个拉丁字母而没有别的,那么正则表达式是否有长度限制:)
答案 0 :(得分:5)
该模式将匹配包含大写拉丁字母的任何字符串;如果碰巧包含任何其他字符,它们将被忽略。如果您想要匹配的字符串,如果字符串包含 仅 大写拉丁字母,那么您将需要使用start(^
)和end({{1 }})锚点,以及你的角色类之后的一个或多个量词($
),如下所示:
+
最后,您的代码应如下所示:
^[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}$
- 此模式将匹配一个或三个大写拉丁字符答案 1 :(得分:1)
将您的模式更改为:
Regex _regex = new Regex("^[A-Z]+$");
答案 2 :(得分:1)
您使用的正则表达式[A-Z]
只匹配一个大写字母。将[A-Z]+
用于输入的任何长度的连续大写字母子字符串。使用^[A-Z]+$
表示子字符串锚定在输入字符串的开始和结束位置。
答案 3 :(得分:0)
我假设你只想匹配一个字母,所以下面唯一匹配的字符串是“D”,如果你想要任意数量的单词使用^ [A-Z] + $
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次拉丁文单词。