【问题标题】:Regex for the following condition以下条件的正则表达式
【发布时间】:2013-07-25 22:03:37
【问题描述】:

我需要一些关于正则表达式的小帮助

  1. 仅允许使用小写字母的字母数字
  2. 以数字或字母开头
  3. 允许句点 (.)
  4. 不允许连续的句号没有..
  5. 不允许任何其他特殊字符

谢谢, -GM

【问题讨论】:

  • 你试过什么?
  • 字符串可以以句点结尾吗?
  • "gimme dat regex" 问题不被鼓励。首先尝试,发布您的正则表达式并提供一些示例。如果您不制作自己的正则表达式,您将永远学不会正则表达式。

标签: php javascript regex conditional


【解决方案1】:
^(?![^.]*\.\.)[a-z0-9][a-z0-9.]*$

开头的否定前瞻涵盖了您的第四个要求,其他一切都应该非常简单。 ^$ 是字符串锚点的开头和结尾,字符类强制要求只允许小写字母、数字和 .

要添加长度限制(6 到 16 个字符之间),只需将 * 更改为 {5,15}* 表示“重复前一个元素零次或多次”,{n,m} 表示“在nm 之间重复前一个元素(包括)”。使用{5,15} 而不是{6,16} 的原因是第一个字符类已经使用了一个字符。这是最终结果:

^(?![^.]*\.\.)[a-z0-9][a-z0-9.]{5,15}$

【讨论】:

  • 由于问题也被标记为 javascript,我想提一下,其中不支持负前瞻。
  • JS 支持负前瞻。也许不是在每个 IE 中,但它们都受支持 (iirc)。
  • @basilikum - 实际上,Javascript 确实支持正面和负面的前瞻。只是不向后看。 (我不久前犯了同样的错误。)
  • @Py 真的吗?我完全相信它不受支持。好的,那我收回来。一定是把它和别的东西弄混了。
  • 如何添加长度在 6-16 个字符之间的约束?非常感谢您的帮助。
【解决方案2】:

这里有一些帮助,但不会泄露答案,因为你会学到最多。

  1. 要匹配特定字符组合,例如字母数字,请使用字符类例如[a-z0-9]。请注意,此表达式与 one 字符完全匹配。您必须使用量词来匹配多个,例如+
  2. 要“开始”或“结束”某事,您必须分别在第一个字符之前或最后一个字符之后使用 anchors^$。 (不过请注意。在字符类中,^ 反转字符类。)
  3. 在正则表达式中,. 作为 通配符 具有特殊含义(匹配除换行符之外的任何字符)。因此,您必须转义它们,\.,以选择 literal 点。转义点的另一种方法是将其放入字符类中:[.]
  4. 非连续性更棘手。您需要查找有关否定前瞻断言(或一般环顾断言)的更多信息。

所有粗体字都是您可以通过 Google 学习的术语。

【讨论】:

    【解决方案3】:

    我想说的是:/^[a-z0-9]+(\.[a-z0-9]+)*\.?$/(假设该行可以以句点结尾)

    【讨论】:

    • Jason:我不明白你会如何匹配这个。点后跟至少一个字母或数字:o
    【解决方案4】:

    如果字符串可能不以句点结尾,请使用此选项:

    /^[a-z0-9]+(\.[a-z0-9]+)*$/
    

    或者如果可能的话:

    /^[a-z0-9]+(\.[a-z0-9]+)*\.?$/
    

    【讨论】:

    • basilikum,由于缺少锚点(字符串如foo..bar),一行中的 2 个点通过了
    • 创造性解决方案,不使用环视断言!
    【解决方案5】:

    这应该是最好的

    ^([a-z0-9]+\.?)+$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多