假设我要匹配输入文本中的某些模式。让模式
password
我希望匹配与我的模式匹配的所有输入,但允许一组预定义的字符替换,例如:
1. a -> @
2. e -> 3
3. o -> 0
4. i -> !
5. s -> $
保持我的榜样,我希望以下所有输入能够与我的password
模式成功匹配:p@ssword
,p@$sword
,pa$$w0rd
等等上。
我的主要问题是如何做到,但缩小范围:
请注意,password
只是一个方便的字,其中包含多个可能的替代字词;我的问题根本不想处理安全问题。
答案 0 :(得分:1)
如果替换始终是单个字符(或多个选项之间的单个字符),则可以使用字符类:
p[a@][s$][s$]w[o0]rd
如果它可以是多个字符,则必须使用替换:
pass(w|\/\/)ord
您可以使用您选择的语言将原始字符的地图/字典定义为可能的替换,并使用它将输入转换为模式:
1. a -> [a@]
2. e -> [e3]
3. o -> [o0]
4. i -> [i!]
5. s -> [s$]
6. w -> (w|\/\/)
password -> p[a@][s$][s$](w|\/\/)[o0]rd
我认为正则表达式可以成为一个很好的工具,但是现有的工具可以测试密码的强度,如果这是你正在寻找的东西。他们解释了常见的替代品。
如果您想禁止人们重复使用密码,也许使用Levenshtein's distance也会对您有用。