如何使用preg_match将字符串列入白名单?

时间:2016-11-15 14:16:07

标签: php

我想检查包含不需要的字符的字符串。 我想只允许一个只包含@ _ a-z的字符串。 我想如果字符串包含任何东西,除了这个字符将给我一个错误的输出。我想检查一个字符串,如果字符串不包含我期望的字符,它将返回true。

我尝试使用preg_match来做到这一点。但无法做到这一点。我认为preg_match不是我需要的功能。请建议我达到我的愿望目标的最佳方式。

  location /server1/ {
    proxy_pass http://server1/;
    proxy_set_header  Host $host;
  }

2 个答案:

答案 0 :(得分:1)

如果你坚持使用preg_match而不是filter_var,那么试试这个:

/^[a-zA-Z0-9.@_]+$/

编辑添加CD001评论的内容。

http://www.phpliveregex.com/p/hSI

答案 1 :(得分:0)

我创建了一个小功能来过滤字符串:

function str_whitelist($string, $whitelist, $strict = false) {
    $whitelist = str_split((!$strict ? strtolower($whitelist) : $whitelist));
    $stringsplit = str_split($string);
    for ($i = 0; $i < count($stringsplit); $i++) {
        $string = !in_array((!$strict ? strtolower($stringsplit[$i]) : $stringsplit[$i]), $whitelist, $strict) ? str_replace($stringsplit[$i], '', $string) : $string;
    }

    return $string;
}

用法:

str_whitelist("Hello123", "ABCDEFGHIJKLMNOPQRSTUVWXYZ") // Output -> Hello