我知道这听起来有点奇怪,但我会试着解释一下
使用此代码检查$text
是否包含不受支持的字符:
if(!preg_match('/\A[\w .,]+\z/', $text))
{
echo "Text contains unsupported characters.";
}
现在问题是$text
是用户在textarea中输入的文本。
$text_c = $_POST['text'];
$text = mysql_real_escape_string($text_c);
echo "<form method='post'><textarea name='text'>".$text."</textarea><br /><input type='submit' name='submit' value='Submit'></form>";
一切都很完美,除了一件事。例如,如果这是在textarea输入的文本:
您好,我的名字是约翰。
行。
您好,我的名字是约翰 我今年20岁。
NO。文本包含不受支持的字符。 (指新行,因为textarea的内容发生了变化,并且有类似的内容:My name is John.\r\nI am 20 years old.
)
我的问题是:我需要改变什么以支持新线路?我希望你明白。
编辑:我刚刚发现,没有mysql_real_escape_string
一切都按照我想要的方式运作。是否有任何解决方案可以“mysql_real_escape_string
与preg_match
(在我的情况下)或mysql_real_escape_string
应该放弃?
答案 0 :(得分:1)
您可以使用\s
来表示空格(新行,制表符和空格)。
所以你的正则表达式成为:/\A[\w .,\s]+\z/
注意\n
\r
都是有效的转义字符,如果您不想包含空格/制表符,\r\n
将匹配dos换行符。
答案 1 :(得分:0)
这不是同一个错误;相反,它不会因为您认为的原因而出错。这不是让你的正则表达式绊倒的新行,而是数字。 ;-)
也可以将\ d添加到正则表达式:/\A[\w\d\s.,]+\z/