PHP-预匹配混淆-不检查字符集是否正确-需要空格

PHP-预匹配混淆-不检查字符集是否正确-需要空格,php,preg-match,Php,Preg Match,我目前正在构建一个应用程序,其中将包含地址,并且我正在使用preg_match进行一些字符检测,如果用户使用无效字符以确保安全,则会以用户的方式抛出一个错误 我的问题是使用preg_match,它似乎表现得很奇怪,我不认为我使用它是否正确,因为它的行为方式 我下面的代码应该允许字母A到Z,包括城市、县和国家的大写和小写字母。以下代码是更新该字段时的城市示例: // The user wants to update the city so let's go through the update p

我目前正在构建一个应用程序,其中将包含地址,并且我正在使用preg_match进行一些字符检测,如果用户使用无效字符以确保安全,则会以用户的方式抛出一个错误

我的问题是使用preg_match,它似乎表现得很奇怪,我不认为我使用它是否正确,因为它的行为方式

我下面的代码应该允许字母A到Z,包括城市、县和国家的大写和小写字母。以下代码是更新该字段时的城市示例:

// The user wants to update the city so let's go through the update process
if ( isset($_POST['city']) ) {

    // Check that the city is different before we try to update it
    if ( $newcompanycity != $companycity ) {

        // Check that the city is less than 50 characters and contains valid characters
        if ( (strlen($newcompanycity) <= 50) && (preg_match('/[^A-Za-z]/', $newcompanycity)) ) {

            // The city is fine so let's update it
            $update_success = true;
            mysqli_query($sql, "UPDATE clients SET city = '$newcompanycity' WHERE companyid = '$companyid'") or die(mysqli_error($sql));

        } else {

            // The city doesn't meet the requirements to be update so return an error
            $update_fail = true;
            $city_error = true;

        }

    }

}
//用户想要更新城市,所以让我们来完成更新过程
如果(isset($_POST['city'])){
//在尝试更新之前,请检查城市是否不同
如果($newcompanycity!=$companycity){
//检查城市是否少于50个字符并且包含有效字符

if((strlen($newcompanycity)有时regexp只会使事情更加复杂。PHP有一个名为
ctype_alpha()
的强大函数,它将检查变量是否只有a-Za-z

(ctype_alpha($newcompanycity))

这里有一个

你的正则表达式是
/[^a-Za-z]/
,意思是“不是a-z和a-z的一切”。 函数返回匹配数,因此如果未找到无效字符,则应返回0

因此,如果您将
(preg_match('/[^A-Za-z]/',$newcompanycity))
更改为
(preg_match('/[^A-Za-z]/',$newcompanycity)==0)
,它应该可以正常工作,因为如果没有找到无效字符,它将变为true


要包含空格,只需将它们添加到您的正则表达式中即可:
/[^A-Za-z]/

谢谢!我不知道它的存在,非常有用。我将使用它。这允许空格(空格)吗如果使用了空格,会不会返回一个错误?谢谢你的帮助,使用三个等号修复了它。我已经为此奋斗了很久,谢谢,终于成功了!