我尝试使用一系列问题来构造一个preg_match if语句来检查字符串,并确保它包含可以通过系统接受的字符。
我有下面的if语句;
if ( !preg_match("~[A-Za-z0-9-_=+,.:;/'!?%^&*()@#'"''£'$€ ]~", $data['text']) ) {}
我在字符串中使用~作为分隔符,并希望确保上述字符在传递的任何字符串中都被接受。
我必须转义"和'引号和$符号,以确保它不会破坏语句。
它似乎可以工作,但是下面的不起作用。
Hello, this is a single line. Don't you agree?
This is also another line, see?
经过一些尝试和错误,似乎逗号也导致字符串检查失败,但它也在preg_match规则中。
我如何接受这些字符A-Za-z0-9-_=+,.:;/'!?%^&*()@#'"''£'$€
以及多行(行空行,空格等)。
编辑
只是对我在文本区输入的内容和实际返回的数据进行了更新。
我在文本区输入了以下内容;
Testing 123
Testing 123
使用print_r;
返回以下语句Testing 123'r'n'r'nTesting 1231
我再看了一下你的问题,实际上有两个问题:
- 正则表达式缺少一个字符来接受任何类型的空格,你应该将其更新为
~[A-Za-z0-9-_=+,.:;/'!?%^&*()@#'"''£'$€'s]+~
这里我用's
替换了末尾的空格字符,以便它支持任何类型的空格(即制表符,换行符等) - 您忘记转义
$data['text']
的输入字符串,您可以使用stripcslashes
。
修复后,你仍然需要验证你的输入,这样做,你可以使用preg_replace
创建一个新的字符串,将包含所有无效字符,如果有任何。从这里你只需要检查字符串是否为空,如果是,那么输入是有效的。
<?php
$data = 'Testing 123'r'n'r'nTesting 1231';
$unescaped_data = stripcslashes($data);
$impureData = preg_replace("~[A-Za-z0-9-_=+,.:;/'!?%^&*()@#'"''£'$€'s]+~",
'', $unescaped_data);
if (0 == strlen($impureData)) {
echo 'TRUE';
}
else {
echo 'FALSE';
}
print_r("
====
$data
====
$impureData
====
");
我得到这个结果:
TRUE
====
Testing 123'r'n'r'nTesting 1231
====
====