我想从用户的输入中找到以下字符串集中的任何字符串:
末尾的数字应为最小长度3&最大6.这是我写的正则表达式:
(Password@(\d{2,6}))|(Pa\$\$w0rd@(\d{2,6}))|(Password#(\d{2,6}))|(Pa\$\$w0rd#(\d{2,6}))|(Password_(\d{2,6}))|(Pa\$\$w0rd_(\d{2,6})).$
I tested my regex on this website and it is not working fine.
它显示"测试通过"直到没有。数字达到8(它不应该是),这显然意味着我犯了一些错误。我不是写Regexes的专家,因为我是新手。我不明白我在哪里弄错了。
答案 0 :(得分:1)
你的正则表达式应该是这样的:^pa[s5$][s5$]w[o0]rd.\d{3,6}$
我对C#的确切语法并不是100%肯定。我在regex101上设置了一个测试套件,向您展示它是如何工作的。
这将获取您给出的字符串的任意组合以及最后的3-6位数字。
答案 1 :(得分:1)
我建议使用字符集来简化你的正则表达式。这样你就不必为每个排列重复通用逻辑,当然这首先是正则表达式的重点。有了这个,我想出了以下内容:
Pa[s\$]{2}w[o0]rd[@#_]\d{3,6}
如果您想允许,可以在第一个字符集中添加5
,如@JustinMacArthur所建议。
你的答案中给出的正则表达式的问题可能与最后的.
有任何关系。这会让任何角色都跟在数字之后(包括另一个数字),它仍会匹配。
答案 2 :(得分:0)
你可以试试这个正则表达式。测试看起来不错:
Pa(\$|s){2}w(0|o)rd[@#_]\d{3,6}