preg_match不接受新行

时间:2013-09-07 05:35:53

标签: php regex preg-match

我知道这听起来有点奇怪,但我会试着解释一下 使用此代码检查$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_stringpreg_match(在我的情况下)或mysql_real_escape_string应该放弃?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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