正则表达式的问题

时间:2011-07-21 05:21:11

标签: php regex

我有以下正则表达式:

/[0-9#%@_$&!?^\/|*<>]+/i

不应该接受信件。当首次没有输入字母时,它会接受字母。

例如为: 如果我输入“123e”,它会找到一个匹配(但不应该因为有一个字母)

我的正则表达式有什么问题?

由于

5 个答案:

答案 0 :(得分:2)

使用开始和结束锚...

/^[\d#%@_$&!?^/|*<>]+\z/i

^表示字符串的开头,\z表示字符串的结尾。字符串末尾常用的$将允许尾随\n。这并不总是合适的。

答案 1 :(得分:2)

您的正则表达式会检查您指定的列表字符是否有一个或多个 - 这对123e是否正确。

它不会检查字符串是否仅包含


您可能想要编辑正则表达式,所以它看起来像这样:

/^[0-9#%@_$&!?^/|*<>]+$/i

我添加了以下两个anchors

  • ^表示“字符串/行的开头
  • $表示“字符串/行的结尾

这意味着正则表达式将检查您的字符串是否以您的某个字符开头,以其中一个字符结尾,并包含这些字符。

答案 2 :(得分:2)

如果您希望整个字符串只包含您在正则表达式中指定的字符,则需要将其锚定:

/^[0-9#%@_$&!?^\/|*<>]+$/i

否则,它会在字符串中的任何位置查找指定的字符类:只要其中至少有一个,正则表达式匹配。

答案 3 :(得分:0)

使用^启动正则表达式,并以$结束。这将使其独占。

^代表该行的开头。

$代表该行的结尾。

答案 4 :(得分:0)

尝试简单地否定代表所有字母的字符类:

/[^a-z^A-Z]+/