我们可以使用正则表达式来确定一个字符串是否遵循这些规则?如何创建(C#)正则表达式规则
- 没有大写字母。
- 以字母开头。
- 至少有1位数不是在开始和结束。
- 最多有8个字母数字
- 没有任何符号像@#$字符(符号像!@#$%^符号像!@#$%^ & *() - +)。
我们可以使用正则表达式来确定一个字符串是否遵循这些规则?如何创建(C#)正则表达式规则
编辑:我已经更新在代码中的正则表达式有一个看起来工作。
@"^[a-z](?=[[email protected]#\$]*[0-9][[email protected]#\$]*)[[email protected]#\$]{0,6}[[email protected]#\$]$"
编辑:我已经调整了代码。其中一项测试是[email protected]
,标志着道格拉斯指出它应该成功时会失败。
我已经验证道格拉斯提供的正则表达式的工作原理和短小也一样。
不是这样的答案,但这里有一个快速测试平台。我用@ ShaunWilde的答案使用了正则表达式和测试。
不幸的是,测试不会返回预期的结果: - |。
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace StackOverflow.RegularExpressions
{
internal class Program
{
private static void Main(string[] args)
{
var validString =
new Regex(@"^[a-z][a-z\[email protected]#$%\^&*()\-+]{0,7}$(?<=\d\D+)",
RegexOptions.Compiled);
var testsAndExpectedResults = new List<Tuple<string, bool>>
{
new Tuple<string, bool>("[email protected]", true),
new Tuple<string, bool>("[email protected]", true),
new Tuple<string, bool>("[email protected]", false),
new Tuple<string, bool>("[email protected]", false),
new Tuple<string, bool>("[email protected]", true),
new Tuple<string, bool>("[email protected]", false),
new Tuple<string, bool>("[email protected]", true),
new Tuple<string, bool>("[email protected]", false),
new Tuple<string, bool>("[email protected]", false),
new Tuple<string, bool>("[email protected]", false),
new Tuple<string, bool>("#[email protected]", false)
};
testsAndExpectedResults.ForEach(t =>
Console.WriteLine("With '{0}' expected {1}, got {2}", t.Item1, t.Item2,
validString.IsMatch(t.Item1))
);
Console.ReadKey();
}
}
}
用@Douglas的答案尝试了ShaunWilde的测试,这似乎也没有完成任务。 – 2012-02-10 21:14:48
我主张将测试分解出来,如果使得有效字符串发生变化的“策略”会更容易维护。 – 2012-02-10 21:17:15
这是测试是不正确的,不是我的正则表达式。 '“aa1 @ aaaa”'符合问题中提出的所有条件;但是,它被定义为预期在测试中失败。 – Douglas 2012-02-11 17:20:48
从内存中;
"^[^A-Z]*$"
"^[A-Za-z].*"
".*\d+.*"
"[[email protected]#\$]{,8}"
现在你应该能够相当简单地将“有这些方式中的任何一种”的“有”子句组合起来,但我不知道它是否可能实际上只有一个正则表达式th在逻辑上是“不是这个,而是其中的一个,这个或这个”。 也许其他海报可以做到这一点!
如果你不确定你的正则表达式,我可以推荐“Expresso”这个非常有用的免费正则表达式探索工具。只需Google就可以了!
您的第二个和第四个正则表达式与第一个正则表达式相矛盾。此外,选举委员会表示,**最多为八个字符,而不是*至少八个。 – 2012-02-10 20:28:37
另外,我们不要为他做他的工作。 – 2012-02-10 20:40:43
最后正则表达式更新 – 2012-02-10 20:47:29
先打谷歌为"password validation regular expression"
给我们的
^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
这
现在将只需要适应为8个字符(最小),并没有在一开始和数量最终也没有大写的开始信
^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[@#$%^&+=])([a-z][^0-9A-Z])[^A-Z]*[^0-9A-Z]$
这是在RegExPlanet
1 [email protected] Yes
2 [email protected] Yes
3 [email protected] No
4 [email protected] No
5 [email protected] No
6 [email protected] No
7 [email protected] No
8 [email protected] No
9 #[email protected] No
进行在线测试,我建议你读的第一篇文章,以这是如何构建的(我学到了很多东西)并使用第二个链接(尽管还有许多其他在线regex测试人员)可以使用正则表达式进行播放,而无需一直编译代码。
Regex regex = new Regex(@"^[a-z][a-z\[email protected]#$%\^&*()\-+]{0,7}$(?<=\d\D+)");
bool isValid = regex.IsMatch(password);
A-Z
或\w
您的正则表达式中的任何地方。 “^[a-z]
。 ^
是字符串开头的锚点。 “[a-z\d]{0,7}
匹配0-7个字母数字字符。 (这个第一个字母将与前面的[a-z]
匹配。)任何其他允许的字符也可以在字符类中指定。需要转义^
和-
。(?<=\d\D+)
。 \d\D+
表示一个数字后跟一个或多个非数字。由于第二种情况,数字在开始时可能不会发生。
是的,这可以通过正则表达式来完成。还有其他问题吗?如果你打算要求一个符合上述规则的正则表达式,我想知道你已经尝试了什么以及你卡在哪里。 – Oded 2012-02-10 20:03:11
是字符之间还是个别行之间的值? – circusdei 2012-02-10 20:05:32
我想说这是用于密码验证 – 2012-02-10 20:06:32