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