警告:preg_match()[function.preg-match]:未知修饰符'('in

时间:2011-08-11 05:04:05

标签: php regex preg-match

我在尝试验证用户名时收到此错误消息。以下pregexp字符串是:^([a-zA-Z])[a-zA-Z_-]*[\w_-]*[\S]$|^([a-zA-Z])[0-9_-]*[\S]$|^[a-zA-Z]*[\S]$^。我已经尝试了所有我能想到的东西,但没有任何作用。

这些是我尝试过的以下可能的解决方案,但失败了:

^([a-zA-Z])[a-zA-Z_-]*[\/w_-]*[\/S]$|^([a-zA-Z])[0-9_-]*[\/S]$|^[a-zA-Z]*[\/S]$^
/^([a-zA-Z])[a-zA-Z_-]*[\/w_-]*[\/S]$|^([a-zA-Z])[0-9_-]*[\/S]$|^[a-zA-Z]*[\/S]$^/
~^([a-zA-Z])[a-zA-Z_-]*[\/w_-]*[\/S]$|^([a-zA-Z])[0-9_-]*[\/S]$|^[a-zA-Z]*[\/S]$^~
#^([a-zA-Z])[a-zA-Z_-]*[\/w_-]*[\/S]$|^([a-zA-Z])[0-9_-]*[\/S]$|^[a-zA-Z]*[\/S]$^#

我希望你能帮助我。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您的正则表达式以^开头,因此被解释为 delimiter

之后的许多字符,你的正则表达式中包含一个^,因为这是非转义的,它被解释为正则表达式的模式部分的结尾。

在第二个^之后,您的正则表达式会立即包含(。在preg_match中,结束分隔符后面的任何内容都被解释为 modifier ,而(不是修饰符。

要解决此问题,您需要read the PHP manual page on delimiters

我认为你想要这样的东西:

/^([a-zA-Z])[a-zA-Z_-]*[\w_-]*[\S]$|^([a-zA-Z])[0-9_-]*[\S]$|^[a-zA-Z]*[\S]$/

在您的第一个示例中,您似乎忘记添加任何分隔符,而^并非用作分隔符。在随后添加分隔符的示例中,您没有告诉我们这些问题是什么(也许它们应该是不同的问题?)。

答案 1 :(得分:-1)

 #^([a-zA-Z])[a-zA-Z_-]*[\/w_-]*[\/S]$|^([a-zA-Z])[0-9_-]*[\/S]$|^[a-zA-Z]*[\/S]$^#

问题在于[\/S]。这会强制用户名以S或前向/斜杠结尾。你打算在那里写[\S]。 (虽然我不确定它的目的是什么。这将允许最后的任何非空格字符。)