在preg_match范围内匹配点

时间:2015-05-22 13:48:44

标签: php regex

我一直在尝试使用.匹配文字点preg_match(),但正则表达式引擎会在\.的位置进行投诉。

这里有什么问题,我该如何解决?

/^[A-Za-z0-9_-\.]{3,16}$/

2 个答案:

答案 0 :(得分:4)

您的字符格式不正确。使用

/^[A-Za-z0-9_.-]{3,16}$/

您将获得- Text range out of order error。您不必在字符范围的最终位置转义连字符。如果你在里面使用它,你必须将其转义。

在字符类中,几乎所有字符都被视为文字,除了右括号],反斜杠\,插入符^和连字符-。 (见Metacharacters Inside Character Classes at Regular-Expressions.info)。

非初始位置的插入符也将被视为文字。如果]位于初始位置,则不必在PHP中进行转义(但必须在JavaScript中进行转义!)。

来自PCRE reference

  
      
  1. Perl,处于警告模式时,会为字符类提供警告      例如[A-\d][a-[:digit:]]。然后它将连字符视为文字。 PCRE没有警告功能,因此在这些情况下会出错,因为它们几乎肯定是用户错误。
  2.   

答案 1 :(得分:2)

问题是在字符类中间存在未转义的连字符。修复它:

/^[A-Za-z0-9_.-]{3,16}$/