3

我知道这听起来有点奇怪,但我会试着解释一下。
使用此代码检查是否$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岁了。

不。文本包含不受支持的字符。(指的是新行,因为 textarea 的内容发生了变化并且有类似的东西My name is John.\r\nI am 20 years old.:)

我的问题是:我需要改变什么来支持新的线路?我希望你明白。

编辑:我刚刚发现,没有mysql_real_escape_string一切都按我想要的方式工作。是否有任何解决方案可以mysql_real_escape_stringpreg_match(在我的情况下)“结合”或mysql_real_escape_string应该放弃?

4

2 回答 2

1

您可以使用\s来表示空白(新行、制表符和空格)。

所以你的正则表达式变成:/\A[\w .,\s]+\z/

注意\n \r都是有效的转义字符,\r\n如果您不想包含空格/制表符,它们将一起匹配 dos 换行符。

很好的参考:http ://www.regular-expressions.info/reference.html

于 2013-09-07T05:43:51.993 回答
0

这不是同一个错误;相反,它并没有因为您认为的相同原因而出错。
让你的正则表达式出错的不是换行符,而是数字。;-)
也将 \d 添加到您的正则表达式中:/\A[\w\d\s.,]+\z/

于 2014-03-05T21:37:27.567 回答