我一直在尝试使用.
匹配文字点preg_match()
,但正则表达式引擎会在\.
的位置进行投诉。
这里有什么问题,我该如何解决?
/^[A-Za-z0-9_-\.]{3,16}$/
答案 0 :(得分:4)
您的字符格式不正确。使用
/^[A-Za-z0-9_.-]{3,16}$/
您将获得- Text range out of order error。您不必在字符范围的最终位置转义连字符。如果你在里面使用它,你必须将其转义。
在字符类中,几乎所有字符都被视为文字,除了右括号]
,反斜杠\
,插入符^
和连字符-
。 (见Metacharacters Inside Character Classes at Regular-Expressions.info)。
非初始位置的插入符也将被视为文字。如果]
位于初始位置,则不必在PHP中进行转义(但必须在JavaScript中进行转义!)。
- Perl,处于警告模式时,会为字符类提供警告 例如
醇>[A-\d]
或[a-[:digit:]]
。然后它将连字符视为文字。 PCRE没有警告功能,因此在这些情况下会出错,因为它们几乎肯定是用户错误。
答案 1 :(得分:2)
问题是在字符类中间存在未转义的连字符。修复它:
/^[A-Za-z0-9_.-]{3,16}$/