php - preg_match 不接受新行

标签 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>";

除一件事外,一切都完美无缺。例如,如果这是在文本区域中输入的文本:

Hello, my name is John.

好的。

Hello, my name is John.
I am 20 years old.

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

我的问题是:我需要更改什么以支持新行?我希望你明白。

编辑: 我刚刚发现,没有 mysql_real_escape_string 一切都完全按照我的意愿运行。是否有任何解决方案可以将 mysql_real_escape_stringpreg_match(在我的例子中)或 mysql_real_escape_string 应该删除?

最佳答案

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

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

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

很好的引用:http://www.regular-expressions.info/reference.html

关于php - preg_match 不接受新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18670130/

相关文章:

mysql - 如何转换 LIKE 语法 (REGEX) 中的 "Or"SQL 条件?

php - 使用预匹配过滤掉 iframe

php - 如何在 preg_replace php 中进行数学运算

php - ORM 是全有还是全无?

php - 搜索引擎优化/PHP : How to Convert Form-Submit URL (Get-Method) without Javascript SEO-Friendly?

php - Algolia 地理搜索不工作

php - 如何从 mysql 表 PHP 中获取最大整数值

regex - 使用正则表达式 (?) 填充数据框列

regex - 如何使用 Visual Studio Code 正则表达式匹配行的开头?

php - 如何精确匹配 PHP 的 preg_match 中的 3 位数字?