我想将用户输入限制为包含2到1024个字母,数字,空格,句点,下划线,短划线,回车符(新行)和制表符的字符串。回车和标签在我的正则表达式中不起作用。我确实知道还有其他方法来检查长度。
if (!preg_match('/^[a-zA-Z0-9 ._-\r\t]{2,1024}$/', $userstring))
{
echo '<p>Bad string</p>';
}
提前致谢。
页面上有一个带有控件的表单。
如果我输入:1CR2(即1,然后是回车,然后是2),并提交页面,将显示错误信息,并且该框中将包含1rn2。
答案 0 :(得分:0)
保留字符(包括.
和-
)需要使用反斜杠(\
)进行转义。请尝试以下正则表达式:^[\w\s\.\-]{2,1024}$
。 \w
匹配单词字符([a-zA-Z0-9_]
)和\s
匹配空白字符([ \t\r\n\f]
)。这使您需要转义.
和-
。最终的PHP代码:
if (!preg_match('/^[\w\s.\-]{2,1024}$/', $userstring))
{
echo '<p>Bad string</p>';
}
有关shorthand classes和reserved characters的更多信息。
编辑: .
不需要在字符类([]
)中进行转义,感谢Barmar。
答案 1 :(得分:0)
尝试:
if (!preg_match("/^[a-zA-Z0-9 ._\-\n\t]{2,1024}$/", $userstring))
{
echo '<p>Bad string</p>';
}
我相信你会希望你的正则表达式用双引号括起来,这样你的换行符(你应该使用\n
而不是\r
)和制表符被正确插值。此外,您应该转义-
,因为它在括号内使用时用于定义范围。
答案 2 :(得分:0)
当您尝试匹配可能包含换行符的字符串时,您需要使用Pattern Modifier在正则表达式中启用多行。 m将启用多行,例如:
if (!preg_match('/^[a-zA-Z0-9 ._-\r\t]{2,1024}/m', $userstring))
{
echo '<p>Bad string</p>';
}
如果有空白空格,也会移除$
。其他人使用\s
代替\r\t
的建议对我来说似乎是合理的。