【问题标题】:regex best practice?正则表达式最佳实践?
【发布时间】:2012-04-26 23:36:02
【问题描述】:

今天我收到老板发来的一封电子邮件,说要更改进入我们客户网站的 java 脚本代码中的正则表达式

[a-zA-Z0-9]+[a-zA-Z0-9_\.\-]

[a-zA-Z0-9]+[a-zA-Z0-9_\-\.]

因为我们的一位客户抱怨这不是正则表达式的最佳做法,并且会导致他们的 CMS 和数据库出现问题。

看看这两个正则表达式,在我看来它们完全匹配。

.和 - 最后交换,但这不应该有所作为。应该吗?

我错过了什么吗?

我们客户公司的开发人员非常坚持要我们改变它。

有人能解释一下吗?

谢谢!

【问题讨论】:

  • @Mike:你说的几乎所有内容都是错误的。您似乎错过了 \ 是转义字符这一事实。
  • 你是对的,出于某种原因,我认为斜线被转义了。哈哈
  • 实际上然后是\-和\。得到两个完全不同的东西。
  • @Mike: '-' 和 '.'分别。

标签: regex database content-management-system


【解决方案1】:

没有功能上的区别。

如果该正则表达式有任何问题,那么它是一个非标准/错误的实现。我建议找出问题所在。

虽然我认为没有理由改变它,但我认为没有理由改变它,所以按照你的意愿去做。

提示:我猜正则表达式写错了。如果我知道它应该是什么意思,我会写它:

[a-zA-Z0-9]+[_\.\-]?

【讨论】:

  • 我同意你的观点,没有理由不改变它。我会继续为他们改变它。我只是好奇他们为什么说这是一种“损坏的格式”。我已经给他们发了电子邮件,并询问了他们的具体情况。如果我得到答案,我会发布更新。
【解决方案2】:

如果您在字符组中使用-,它会排在最后,否则它表示一个字符范围,例如A-Z。如果你像你一样逃避它,那么它可以在任何地方。

他们使用的 CMS 或其他代码可能会取消转义正则表达式,因此在这种情况下,如果 - 不是组中的最后一个字符,它将引发错误。我想说的是,正则表达式中的转义字符越少越容易阅读,但这是从个人角度来看的。

【讨论】:

  • 请注意,并非所有正则表达式语法都支持字符类中的反斜杠转义,在这种情况下,两种形式实际上都包含反斜杠作为合法字符。 (但它们是等价的,因为带连字符的两边都有一个反斜杠,[\-\][\] 相同。)
猜你喜欢
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多