正则表达式:字符白名单+最大长度+末尾没有点

时间:2014-06-24 11:41:48

标签: regex

我不知道为什么我会挣扎于这个简单的正则表达式,但我是:)

我需要一个正则表达式来匹配字符串:

  • 使用允许的字符[a-zA-Z0-9_.-]
  • 包含1到48个字符
  • 可以有点,但不能在字符串的末尾

尝试了一堆正则表达式,但总有一些东西在匹配中滑落。我最终得到了

^([a-zA-Z0-9_.-]{1,48})([^.])$

出于某种原因,例如test$被视为有效。 test$$不是。

有人可以帮助我走上正轨吗?

2 个答案:

答案 0 :(得分:1)

[^.]结束你的正则表达式并将匹配除点之外的任何字符,因此你实际上要检查长度为2到49个字符的字符串,最后一个字符串除了.之外的任何字符。

要检查您的标准,您可以改为使用:

^[a-zA-Z0-9_.-]{0,47}[a-zA-Z0-9_-]$

这个考虑到最后一个角色类正在“吃掉”一个角色。

答案 1 :(得分:1)

如果你的正则表达式引擎支持,你可以使用负面的lookbehind:

^[a-zA-Z0-9_.-]{1,48}(?<!\.)$

Regular expression visualization

<强> Demo

如果您的正则表达式引擎不支持负面后瞻,但支持负面预测,那么以下内容对您有用:

^(?!.*\.$)[a-zA-Z0-9_.-]{1,48}$

Regular expression visualization

<强> Demo