我知道这听起来有点奇怪,但我会尽力解释的。
使用此代码检查$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_string与preg_match (在我的例子中)“结合”,或者mysql_real_escape_string应该删除?
发布于 2013-09-07 05:43:51
您可以使用\s来表示空白(新行、制表符和空格)。
所以你的正则表达式变成:/\A[\w .,\s]+\z/
注\n \r都是有效的转义字符,如果不想包含空格/制表符,\r\n将匹配dos行中断。
发布于 2014-03-05 21:37:27
这不是同一个错误;相反,它并不是因为你认为是同样的原因而犯错误的。
不是新的行把你的判断力给绊倒了,而是数字。;-)
将\d添加到regex中:/\A[\w\d\s.,]+\z/
https://stackoverflow.com/questions/18670130
复制相似问题