匹配文本模式通过允许的字符替换放宽约束

Matching text patterns relaxing contraints with admitted character substitutions

假设我必须匹配输入文本中的某些模式。让模式成为

password

我想匹配所有与我的模式匹配的输入,但承认一组预定义的 字符替换,比如:

1. a -> @
2. e -> 3
3. o -> 0
4. i -> !
5. s -> $

继续我的示例,我希望以下所有输入都能成功匹配我的 password 模式:p@sswordp@$swordpa$$w0rd,等等上。

我的主要问题是怎么做,但缩小范围:

  1. 正则表达式是正确的工具吗?
  2. 如何定义正则表达式匹配应考虑的承认的替换集
  3. 这是我忽略的一个很常见的问题吗?
  4. 什么是简洁的方法(即只需定义 一次 替换,而不必为每个承认的模式重复它们)来实现多个模式?

请注意,password 只是一个 方便 的单词,其中包含几个可能的替代词;我的问题根本不想处理安全问题。

如果替换始终是单个字符(或多个选择之间的单个字符),则可以使用字符 class :

p[a@][s$][s$]w[o0]rd

如果可以是多个字符,则必须使用交替:

pass(w|\/\/)ord

您可以定义 map/dictionary 个原始字符以用您选择的语言进行可能的替换,并使用它来将输入转换为模式:

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 对您也有用。