如何获取正则表达式来检查字符串是否只包含字母字符或?

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

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

这是我到目前为止所做的……虽然无法弄清楚它有什么问题

Regex alphaPattern = new Regex("[^az]|[^AZ]");

我认为这意味着字符串只能包含来自az的大写或小写字母,但是当我将它与所有字母的字符串匹配时,它返回false …

此外,任何有关使用正则表达式与其他validation方法的效率的建议将非常感激。

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

我正在尝试创建一个正则表达式来validation给定的字符串只有字母az或AZ。

很容易完成,因为许多其他人已经指出使用所谓的“字符类”。 从本质上讲,这些允许我们指定用于匹配的一系列值:(注意:为了简化,我假设隐含^和$ anchors,这将在本文后面解释)

[az]匹配任何单个小写字母。
例如:匹配,8不匹配

[AZ]匹配任何单个大写字母。
例如:匹配,a不匹配

[0-9]匹配任何单个数字零到九
例如:8场比赛,a不匹配

[aeiou]仅在a或e或i或o或u上匹配。 例如:匹配,z不匹配

[a-zA-Z]匹配任何单个小写或大写字母。 例如:匹配,匹配,3不匹配

当然,这些也可以被否定: [^ az]匹配任何不是小写字母ex的东西:5个匹配,A个匹配,a匹配不匹配

[^ AZ]匹配任何不是大写字母ex:5匹配,A不匹配,匹配

[^ 0-9]匹配任何不是数字的东西:5不匹配,A匹配,匹配

[^ Aa69]匹配任何内容,只要它不是A或a或6或9 ex:5匹配,A不匹配,a不匹配,3匹配

要查看一些常见的字符类,请访问: http : //www.regular-expressions.info/reference.html

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

你绝对可以检查“长度”但不是你想象的方式。 我们使用{}严格测量重复,而不是长度:

a {2}将两个a匹配在一起。
例如:a不匹配,aa匹配,aca不匹配

4 {3}将三个4匹配在一起。 例如:4不匹配,44不匹配,444匹配,4434不匹配

重复具有我们可以设置为具有下限和上限的值:

a {2,}匹配两个或多个a。 ex:a不匹配,aa匹配,aaa匹配,aba不匹配,aaaaaaaaa匹配

{2,5}匹配两到五个a。 ex:a不匹配,aa匹配,aaa匹配,aba不匹配,aaaaaaaaa不匹配

重复扩展到字符类,因此: [az] {5}将任意五个小写字符匹配在一起。 ex:bubba比赛,Bubba不匹配,BUBBA不匹配,asdjo比赛

[AZ] {2,5}将两到五个大写字符匹配在一起。 ex:bubba不匹配,Bubba不匹配,BUBBA比赛,BUBBETTE不匹配

[0-9] {4,8}将四到八个数字匹配在一起。 例如:bubba不匹配,15835匹配,44不匹配,3456876353456不匹配

[a3g] {2}如果一起出现两次,则匹配一个OR 3 OR g。 例如:aa匹配,ba不匹配,33匹配,38不匹配,a3不匹配

现在让我们来看看你的正则表达式: [^ az] | [^ AZ]翻译:匹配任何东西,只要它不是小写字母或大写字母。

要修复它以满足您的需求,我们会像这样重写它:第1步:删除否定[az] | [AZ]翻译:找到任何小写字母或大写字母。

第2步:虽然不是非常需要,但是让我们稍微清理OR逻辑[a-zA-Z]翻译:找到任何小写字母或大写字母。 与上面相同,但现在只使用一组[]。

第3步:现在让我们指出“长度” [a-zA-Z] {1,25}翻译:找到任何小写字母或大写字母重复一到二十五次。

这是事情变得时髦的地方。 你可能认为你在这里完成了,你很可能依赖于你正在使用的技术。

严格来说,正则表达式[a-zA-Z] {1,25}将在一条线上任意一对地匹配一到二十五个大写或小写字母:

[a-zA-Z] {1,25} a匹配,aZgD匹配,BUBBA匹配,243242hello242552 MATCHES

事实上,到目前为止我给出的每个例子都会做同样的事情。 如果这就是你想要的,那么你的状态很好,但根据你的问题,我猜你只需要整行上一到二十五个大写或小写字母。 为此我们转向锚点。 锚点允许我们指定那些讨厌的细节:

^一行的开头
(我知道,我们之前只是用这个来否定,不要让我开始)

$ end of a line

我们可以像这样使用它们:

^ a {3}从一行开始匹配三次ex:aaa匹配,123aaa不匹配,aaa123匹配

a {3} $在一行结尾处匹配三次:aaa匹配,123aaa匹配,aaa123不匹配

^ a {3} $一起匹配三次ENTIRE行ex:aaa匹配,123aaa不匹配,aaa123不匹配

请注意,aaa在所有情况下都匹配,因为从技术上讲,它在行的开头和结尾有三个a。

因此,最终的,技术上正确的解决方案是,在一条线上找到“最多五个字符长”的“单词”将是:

^ [A-ZA-Z] {1,25} $

时髦的部分是,有些技术隐含地为你设置了正则表达式,有些技术没有。 你只需要测试你的正则表达式或阅读文档,看看你是否有隐含的锚点。

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

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

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

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

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

您正在使用的正则表达式是[^az][^AZ]的交替。 表达式[^…]意味着匹配除字符集中描述的字符之外的任何字符。

总的来说,表达式意味着匹配除az之外的任何单个字符或AZ之外的任何单个字符。

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

 [a-zA-Z] 

并指定其长度,使用字符串的start( ^ )和end( $ )锚定表达式,并使用{ n , m }量词描述长度,表示至少n但不超过m次重复:

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

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

 new Regex("^([az]{1,25}|[AZ]{1,25})$") 

对于这种情况,正则表达式似乎是正确的用法。

顺便说一下,字符类中第一个位置的插入符号(“^”)表示“不”,所以你的“ [^az]|[^AZ] ”意思是“不是任何小写字母,或者不是任何大写字母“(不管az不是所有字母)。

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

  • Regex Buddy – 30欧元
  • 正则表达式教练 – 免费

它们是一个很好的帮助,因为它们会立即告诉您表达是否符合预期,甚至允许您单步调试。