Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-清理字符串删除数字_Php_Sanitization - Fatal编程技术网

PHP-清理字符串删除数字

PHP-清理字符串删除数字,php,sanitization,Php,Sanitization,我试图在数组中定义允许的字符,然后基于此数组清理字符串。下面的代码工作得很好,只是它也删除了字符0-9 有人能解释一下为什么会这样吗 代码: Sidenote(编辑):这与数据库一起使用,但它超出了数据库的范围,数据库中的数据用于编写powershell脚本,将用户导入Active Directory,不允许使用许多字符,加上旧系统也只允许使用这些字符 提前谢谢大家,, Wayne根据@andrewsi所说的,允许的字符没有添加到数组中,我找到了如何正确添加它们的方法。下面的代码显示了它们的添加

我试图在数组中定义允许的字符,然后基于此数组清理字符串。下面的代码工作得很好,只是它也删除了字符0-9

有人能解释一下为什么会这样吗

代码:

Sidenote(编辑):这与数据库一起使用,但它超出了数据库的范围,数据库中的数据用于编写powershell脚本,将用户导入Active Directory,不允许使用许多字符,加上旧系统也只允许使用这些字符

提前谢谢大家,,
Wayne

根据@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";

?>

根据@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";

?>

旁注:这可能与数据库有关吗?如果是这样,你就不需要这些了。您可以使用准备好的语句。它可以,但它超出了数据库的范围,数据库中的数据用于编写powershell脚本,将用户导入Active Directory,并且不允许使用许多字符,另外,旧系统也只允许使用这些字符。我怀疑这是您将范围添加到数据库的方式存在问题-如果您将
$symbols+=range('0','9')行首先,它会将数字添加到数组中,但实际上,
$symbols
不包括打印出来的数字。在这两种情况下,它似乎都不包括大写字母。@WayneWorkman-我不知道;我甚至不知道可以使用+来附加到数组,所以我怀疑这可能就是问题所在。您可以改用
array\u push
吗?保留大写字符的原因是正则表达式中的
/i
标志使其不区分大小写。旁注:这可能与数据库有关吗?如果是这样,你就不需要这些了。您可以使用准备好的语句。它可以,但它超出了数据库的范围,数据库中的数据用于编写powershell脚本,将用户导入Active Directory,并且不允许使用许多字符,另外,旧系统也只允许使用这些字符。我怀疑这是您将范围添加到数据库的方式存在问题-如果您将
$symbols+=range('0','9')行首先,它会将数字添加到数组中,但实际上,
$symbols
不包括打印出来的数字。在这两种情况下,它似乎都不包括大写字母。@WayneWorkman-我不知道;我甚至不知道可以使用+来附加到数组,所以我怀疑这可能就是问题所在。你可以改用
array\u push
吗?保留高位字符的原因是正则表达式中的
/i
标志使其不区分大小写。我很好奇为什么你不使用元字符,比如
preg\u replace('/[^a-zA-Z\d-]/','')这将替换除连字符和空格以外的任何特殊字符。我还添加了一些其他特殊字符。所以你不需要使用
array\u push
,只需像这样使用
$array[]=$value
:@fyrye,因为我还在学习php,而且我不理解你在发布的preg\u replace语句中输入的所有字符,我上面写的方式对我来说很有意义,也很容易理解。元字符可以查找,对于所有使用正则表达式的编程语言来说都是相当标准的。因此,我写的表达式
[^]
表示不匹配的模式,
a-z
是小写字符a到z,
a-z
是大写字符a到z,
\d
是任何数字字符(与0-9相同),除了字面意义的
-
和```之外,这几乎是不匹配的(空格与
\s
)不同。实际上与您编写的数组相同。我很好奇为什么您不使用元字符,例如
preg\u replace('/[^a-zA-Z\d-]/','');
这将替换除连字符和空格以外的任何特殊字符。例如:我还添加了一些其他特殊字符。因此,您不需要使用
数组_push
,只需使用
$array[]=$value
像这样:@fyrye因为我还在学习php,因为我不理解你在你发布的preg_replace语句中输入的所有字符,我上面写的方式对我来说很有意义,也很容易理解。元字符可以查找,对于所有使用REG的编程语言来说都是相当标准的lar表达式..所以我写的表达式
[^]
意味着不匹配的模式,
a-z
是小写字符a到z,
a-z
是大写字符a到z,
\d
是任何数字字符(与0-9相同),除了字面的
-
和```之外,这几乎是不匹配的(空格与
\s
不同)。实际上与您编写的数组相同。
<?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-