17 c# regex asp.net verification
我正在尝试创建一个正则表达式来验证给定的字符串只有字母az或AZ.该字符串最长可达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]");
我认为这意味着字符串只能包含来自az的大写或小写字母,但是当我将它与所有字母的字符串匹配时,它返回false ...
此外,任何关于使用正则表达式与其他验证方法的效率的建议将不胜感激.
Bli*_*ixt 37
Regex lettersOnly = new Regex("^[a-zA-Z]{1,25}$");
Run Code Online (Sandbox Code Playgroud)
^ 表示"在字符串开头处开始匹配"[a-zA-Z] 表示"匹配小写字母和大写字母az"{1,25} 表示"匹配前一项(字符类,见上文)1至25次"$ 表示"只有当光标位于字符串的末尾时才匹配"zai*_*nab 18
我正在尝试创建一个正则表达式来验证给定的字符串只有字母az或AZ.
很容易完成,因为许多其他人已经指出使用所谓的"字符类".从本质上讲,这些允许我们指定用于匹配的一系列值:(注意:为了简化,我假设隐含^和$ anchors,这将在本文后面解释)
[az] 匹配任何单个小写字母.
例如:匹配,8不匹配
[AZ] 匹配任何单个大写字母.
例如:匹配,a不匹配
[0-9] 匹配任何单个数字零到九个
ex: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}将匹配一个到25上或小写字母ANYWHERE上一行:
[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} $ 的三倍搭配在一起完成的行前:AAA比赛,123aaa不匹配,AAA123不匹配
请注意,aaa在所有情况下都匹配,因为从技术上讲,它在行的开头和结尾有三个a.
因此,最终的,技术上正确的解决方案是,在一条线上找到"最多五个字符长"的"单词"将是:
^ [A-ZA-Z] {1,25} $
时髦的部分是,有些技术隐含地为你设置了正则表达式,有些技术没有.您只需要测试正则表达式或阅读文档以查看是否有隐式锚点.
/// <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);
}
Run Code Online (Sandbox Code Playgroud)
该字符串最长可达25个字母.(我不确定正则表达式是否可以检查字符串的长度)
正则表达式可以检查字符串的长度 - 从其他人发布的答案中可以看出.
但是,当您验证用户输入(例如,用户名)时,我会建议单独执行该检查.
问题是,正则表达式只能告诉你字符串是否与之匹配.它不会告诉它为什么不匹配.文本太长还是包含不允许的字符 - 你无法分辨.当一个程序说:"提供的用户名包含无效字符或太长"时,它远非友好.相反,您应该为不同的情况提供单独的错误消息.