我尝试使用一系列问题来构造一个preg_match if语句来检查字符串,并确保它包含接受通过系统的字符。
我有以下if声明;
select
x.*,
hr.EmployeeID, hr.Title, c.FirstName, c.LastName
from
openxml (@IDoc, '/ROOT/Employee',1)
with (
EmployeeID varchar(10),
EmpStatus varchar(20)
) as x
inner join HumanResources.Employee hr with (nolock) on
x.EmployeeID = hr.EmployeeID
inner join Contactinfo c with (nolock)
on hr.ContactID = c.ContactID;
我在字符串中使用〜作为分隔符,并希望确保在传递的任何字符串中都接受上述字符。
我必须逃脱"和'引号和$符号以确保它不会破坏声明。
但似乎有效,但以下情况并不奏效。
if ( !preg_match("~[A-Za-z0-9-_=+,.:;/\!?%^&*()@#\"\'£\$€ ]~", $data['text']) ) {}
经过一些试验和错误后,似乎逗号也导致字符串检查失败,但它也在preg_match规则中。
我如何接受这些字符Hello, this is a single line. Don't you agree?
This is also another line, see?
以及多行(行空行,空格等)。
修改
只是更新我在textarea中输入的内容以及实际返回的数据。
我在textarea中输入了以下内容;
A-Za-z0-9-_=+,.:;/\!?%^&*()@#\"\'£\$€
使用print_r;
返回以下内容Testing 123
Testing 123
答案 0 :(得分:0)
我再看看你的问题,实际上有两个问题:
~[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
====
====