正则表达式匹配一些字符串

时间:2017-11-23 22:41:44

标签: c# asp.net regex

我想从用户的输入中找到以下字符串集中的任何字符串:

  • 密码@ 123
  • 为Pa $$ w0rd @ 123
  • 密码#123
  • 为Pa $$ w0rd#123
  • Password_123
  • 为Pa $$ w0rd_123

末尾的数字应为最小长度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的专家,因为我是新手。我不明白我在哪里弄错了。

3 个答案:

答案 0 :(得分:1)

你的正则表达式应该是这样的:^pa[s5$][s5$]w[o0]rd.\d{3,6}$我对C#的确切语法并不是100%肯定。我在regex101上设置了一个测试套件,向您展示它是如何工作的。

这将获取您给出的字符串的任意组合以及最后的3-6位数字。

https://regex101.com/r/1KaJNz/2

答案 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}