PHP - 清理字符串删除数字
PHP - Sanitize string removes numbers
我试图在一个数组中定义允许的字符,然后根据这个数组清理字符串。下面的代码工作得很好,除了它也删除了字符 0-9!
有人可以解释这是为什么吗?
代码:
<?php
//Allowed characters within user data:
$symbols = array();
$symbols += range('a', 'z');
$symbols += range('A', 'Z');
$symbols += range('0', '9');
array_push($symbols,' ','-'); // Allow spaces and hyphens.
//----test 1
//data to test.
$someString = "07mm04dd1776yyyy";
//sanatize
$someString = trim(preg_replace("/[^" . preg_quote(implode('',$symbols), '/') . "]/i", "", $someString));
echo "$someString\n";
//----test 2
$someString = "Another-07/04/1776-test-!@#$%^&*()[]\;',./\"[]|;\"<>?";
//sanatize
$someString = trim(preg_replace("/[^" . preg_quote(implode('',$symbols), '/') . "]/i", "", $someString));
echo "$someString\n";
?>
输出:
mmddyyyy
Another--test-
旁注(编辑):这与数据库结合使用,但它超出了数据库,数据库中的数据用于编写将用户导入 Active Directory 的 powershell 脚本,并且不允许使用许多字符,加上旧系统也只允许这些字符。
提前谢谢你,
韦恩
根据@andrewsi 所说的未将允许的字符添加到数组中,我想出了如何正确添加它们的方法。下面的代码显示了它们被添加,以及测试字符串的输出。
可能有更好的方法,所以我将其添加到社区 wiki。
<?php
//Allowed characters within user data:
$symbols = array();
array_push($symbols,implode("",range('0', '9')));
array_push($symbols,implode("",range('a', 'z')));
array_push($symbols,implode("",range('A', 'Z')));
array_push($symbols,' ','-'); // Allow spaces and hyphens.
print_r($symbols);
echo "\n";
//----test 1
//data to test.
$someString = "07mm04dd1776yyyy";
//sanatize
$someString = trim(preg_replace("/[^" . preg_quote(implode('',$symbols), '/') . "]/", "", $someString));
echo "$someString\n";
//----test 2
$someString = "Another-07/04/1776-test-!@#$%^&*()[]\;',./\"[]|;\"<>?";
//sanatize
$someString = trim(preg_replace("/[^" . preg_quote(implode('',$symbols), '/') . "]/", "", $someString));
echo "$someString\n";
?>
输出:
Array
(
[0] => 0123456789
[1] => abcdefghijklmnopqrstuvwxyz
[2] => ABCDEFGHIJKLMNOPQRSTUVWXYZ
[3] =>
[4] => -
)
07mm04dd1776yyyy
Another-07041776-test-
我试图在一个数组中定义允许的字符,然后根据这个数组清理字符串。下面的代码工作得很好,除了它也删除了字符 0-9!
有人可以解释这是为什么吗?
代码:
<?php
//Allowed characters within user data:
$symbols = array();
$symbols += range('a', 'z');
$symbols += range('A', 'Z');
$symbols += range('0', '9');
array_push($symbols,' ','-'); // Allow spaces and hyphens.
//----test 1
//data to test.
$someString = "07mm04dd1776yyyy";
//sanatize
$someString = trim(preg_replace("/[^" . preg_quote(implode('',$symbols), '/') . "]/i", "", $someString));
echo "$someString\n";
//----test 2
$someString = "Another-07/04/1776-test-!@#$%^&*()[]\;',./\"[]|;\"<>?";
//sanatize
$someString = trim(preg_replace("/[^" . preg_quote(implode('',$symbols), '/') . "]/i", "", $someString));
echo "$someString\n";
?>
输出:
mmddyyyy
Another--test-
旁注(编辑):这与数据库结合使用,但它超出了数据库,数据库中的数据用于编写将用户导入 Active Directory 的 powershell 脚本,并且不允许使用许多字符,加上旧系统也只允许这些字符。
提前谢谢你, 韦恩
根据@andrewsi 所说的未将允许的字符添加到数组中,我想出了如何正确添加它们的方法。下面的代码显示了它们被添加,以及测试字符串的输出。
可能有更好的方法,所以我将其添加到社区 wiki。
<?php
//Allowed characters within user data:
$symbols = array();
array_push($symbols,implode("",range('0', '9')));
array_push($symbols,implode("",range('a', 'z')));
array_push($symbols,implode("",range('A', 'Z')));
array_push($symbols,' ','-'); // Allow spaces and hyphens.
print_r($symbols);
echo "\n";
//----test 1
//data to test.
$someString = "07mm04dd1776yyyy";
//sanatize
$someString = trim(preg_replace("/[^" . preg_quote(implode('',$symbols), '/') . "]/", "", $someString));
echo "$someString\n";
//----test 2
$someString = "Another-07/04/1776-test-!@#$%^&*()[]\;',./\"[]|;\"<>?";
//sanatize
$someString = trim(preg_replace("/[^" . preg_quote(implode('',$symbols), '/') . "]/", "", $someString));
echo "$someString\n";
?>
输出:
Array
(
[0] => 0123456789
[1] => abcdefghijklmnopqrstuvwxyz
[2] => ABCDEFGHIJKLMNOPQRSTUVWXYZ
[3] =>
[4] => -
)
07mm04dd1776yyyy
Another-07041776-test-