通过AJAX向PHP传递特殊字符

通过AJAX向PHP传递特殊字符,php,ajax,regex,validation,Php,Ajax,Regex,Validation,我正在收集表单数据,通过AJAX调用将其发送到PHP验证脚本。问题在于php验证脚本的特殊字符没有按预期工作 HTML: PHP验证 PHP过滤器 在空字符串上,它将错误打印到屏幕上。但是如果我做一些像~!@$%^&*,然后它接受字符串为good,不抛出和出错,即使preg_match的结果==false $string = trim($string); if ($string == null || $string == "") { return false; } else {

我正在收集表单数据,通过AJAX调用将其发送到PHP验证脚本。问题在于php验证脚本的特殊字符没有按预期工作

HTML:

PHP验证

PHP过滤器

在空字符串上,它将错误打印到屏幕上。但是如果我做一些像~!@$%^&*,然后它接受字符串为good,不抛出和出错,即使preg_match的结果==false

$string = trim($string);

if ($string == null || $string == "") {
    return false;
} else {
    if (preg_match("/[^\.,\-_'\"@?!:;\$#&\+=\sa-zA-Z0-9\(\)]/", $string) == true) {
        return false;
    } else {
        return true;
    }
}
这是更有效的正则表达式,但不是您想要的结果:您正在检查几乎所有的输入,因此它将匹配abcd并返回false。正则表达式有11个具有特殊含义的字符,只有这些字符和需要转义的字符:^$[]|.*+-

请尝试以下操作:-

<?php
$string = "tes$%tname"; // invalid string
//$string = "testname"; // valid string

if(test($string) == false)
{
    echo "String is invalid";
}


function test($string){
    $string = trim($string);

    if ($string == null || $string == "") {
        return false;
    } else {
        if (preg_match("/[^\.,\-_'\"@?!:;\$#&\+=\sa-zA-Z0-9\(\)]/",$string) == true) {
            return false;
        } else {
            return true;
        }
    }
}

?>

PHPFiddle在这里:-

:如果模式与给定主题匹配,preg_match返回1,如果不匹配,则返回0,如果发生错误,则返回FALSE。你试过比较吗!=0?@davidkonrad:很高兴知道,但仍然不是预期的结果。我确信validateString返回false,但是如果条件不是AcceptSign它…从pregmatch的文档中,此函数可能返回Boolean false,但也可能返回计算结果为false的非Boolean值。有关更多信息,请阅读布尔值部分。使用===运算符测试此函数的返回值。尝试使用===而不是==@Atul:也不起作用。我加入了validateString,摆脱了preg_match,结果返回false。然而,对于PHP验证脚本,它并没有触发IF条件。但是如果返回空的和空字符串的假工程,那么它也应该对这一点很有效。我试着用另一个preg_match来回答这个问题
$postData = $_POST;

if (Filter::validateString($postData['firstName']) == false) {
    echo "Oops! Some characters used in your first name are not valid.";
}
//Returns true if string is good, false otherwise
public static function validateString($string) {
    $string = trim($string);

    if ($string == null || $string == "") {
        return false;
    } else {
        if (preg_match("/[^\.\,\-\_\'\"\@\?\!\:\;\$\#\%\&\+\= a-zA-Z0-9()]/", $string) == true) {
            return false;
        } else {
            return true;
        }
    }
}
$string = trim($string);

if ($string == null || $string == "") {
    return false;
} else {
    if (preg_match("/[^\.,\-_'\"@?!:;\$#&\+=\sa-zA-Z0-9\(\)]/", $string) == true) {
        return false;
    } else {
        return true;
    }
}
<?php
$string = "tes$%tname"; // invalid string
//$string = "testname"; // valid string

if(test($string) == false)
{
    echo "String is invalid";
}


function test($string){
    $string = trim($string);

    if ($string == null || $string == "") {
        return false;
    } else {
        if (preg_match("/[^\.,\-_'\"@?!:;\$#&\+=\sa-zA-Z0-9\(\)]/",$string) == true) {
            return false;
        } else {
            return true;
        }
    }
}

?>