我在尝试验证用户名时收到此错误消息。以下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]$^#
我希望你能帮助我。 提前谢谢。
答案 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]
。 (虽然我不确定它的目的是什么。这将允许最后的任何非空格字符。)