【问题标题】:Regular expression for filtering similar characters过滤相似字符的正则表达式
【发布时间】:2015-01-07 17:01:40
【问题描述】:

我正在尝试构造一个正则表达式来实现以下限制:

该值可以是任意长度,但不能包含相似的字母/数字,这可能会在打印时造成混淆。例如,1(数字)、I(大写拉丁语 i)和 l(小写拉丁语 L)看起来相似;可能还有其他这样的例子

我已经尝试了一些东西,但无法让它工作,任何帮助将不胜感激:谢谢。

例如:我可以有Linux1,但不能有LINUX1linux1

【问题讨论】:

  • 我编辑了您的问题以使其更清晰;希望这对你想做的事情是真实的。您是否需要为此提供正则表达式解决方案?
  • 是的,对不起,也许我应该更清楚一点:这是为了训练而不是实际使用:)

标签: php regex


【解决方案1】:

我怀疑正则表达式是否适合这里,但如果你真的需要,你可能需要根据具体情况处理它们:(1I)|(I1)|([Ii][Ll])|([Ll][Ii])。因此,如果正则表达式匹配,您将不得不拒绝该字符串。可以在here 找到一个正则表达式的工作示例。

根据您的 cmets,您可以尝试使用如下内容:(1.*I)|(I.*1)|([Ii].*[Ll])|([Ll].*[Ii])。可以在here 找到一个有效的正则表达式。此正则表达式还将检查被视为相似的 之间 值。

【讨论】:

  • 谢谢;但是也许我应该更相似:如果存在一对这些被拒绝的字符,我需要在所有情况下拒绝字符串:例如,您的解决方案拒绝 1I,但不拒绝 1fdsafsI 任何想法? (我想我听说过前瞻?不确定这在这里是否有用)
  • @Jackhardcastle:您能否提供信息说明您为什么要拒​​绝1fdsafsI
  • 这是大学作业;他们为我提供了一个正则表达式测试器 PHP 文件,并要求我为每个限制提出解决方案,这个限制被传递到 preg_match() 中,然后评估并通过/失败。这不是为了实际目的,而是为了教育。跨度>
  • @Jackhardcastle:我明白了。但是,我的意思是您应用了哪些规则,这使您决定1fdsafsI 无效。是因为它以被认为相似的字符开头和结尾吗?
  • 哦;我的错,是的,因为它包含一个 1,它不应该包含一个 I(或小写 L),如果这有意义的话?我猜这个词很尴尬。
猜你喜欢
  • 2012-10-13
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
相关资源
最近更新 更多