首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >preg_match不接受新行

问preg_match不接受新行
EN

Stack Overflow用户
提问于 2013-09-07 05:35:53
回答 2查看 2.1K关注 0票数 3

我知道这听起来有点奇怪,但我会尽力解释的。

使用此代码检查$text是否包含不受支持的字符:

代码语言:javascript
复制
if(!preg_match('/\A[\w .,]+\z/', $text))
{
    echo "Text contains unsupported characters.";
}

现在的问题是$text是用户在textarea中输入的文本。

代码语言:javascript
复制
$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_string与preg_match (在我的例子中)“结合”,或者mysql_real_escape_string应该删除?

EN

回答 2

Stack Overflow用户

发布于 2013-09-07 05:43:51

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

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2014-03-05 21:37:27

这不是同一个错误;相反,它并不是因为你认为是同样的原因而犯错误的。

不是新的行把你的判断力给绊倒了,而是数字。;-)

将\d添加到regex中:/\A[\w\d\s.,]+\z/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18670130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档