Php 仅授权字符的代码简化
我得到一个字符串,其中包含Php 仅授权字符的代码简化,php,Php,我得到一个字符串,其中包含“@string.number(其他内容)”。 我想从start+1(=忽略@)过滤输入,直到得到不同于字母数字或'-'、''''''''.'的内容。 以下是我的功能: function _isCharAllowed($c) { return (ctype_alnum(str_replace(array('-', '_', '.'), '', $c))); } $f=1; while ($this->_isCharAllowed(mb_substr($st
“@string.number(其他内容)”
。
我想从start+1(=忽略@
)过滤输入,直到得到不同于字母数字或'-'、''''''''.'的内容。
以下是我的功能:
function _isCharAllowed($c)
{
return (ctype_alnum(str_replace(array('-', '_', '.'), '', $c)));
}
$f=1;
while ($this->_isCharAllowed(mb_substr($str, $f, 1)))
$f++;
$key=mb_substr($str, 1, $f-2);
我想要两样东西。首先,我对包含'-'、''.'和'.'.'.
的字符串有一个问题,因为它不是我想要的:当有这样的字符串时,它会删除这些字符,将空字符串赋给ctype_alnum(),返回false:
php -r 'echo var_export((ctype_alnum("")), true)."\n";'
我想优化它。
你会怎么做?为什么不使用
例如:
$pattern = '/[^a-z0-9\-\_\.]/';
$strs = [
'some_string-with234.a',
'ano^ther-st*ring-with´+º~º'
];
foreach ($strs as $str) {
echo preg_replace($pattern, '', $str) . PHP_EOL;
}
您可以将它们替换为允许的字符,例如
a
。这样,字符串将永远不会为空
旁注:听到
ctype_alnum(“”)
返回false
,我感到震惊(但并不惊讶)。这与手册上说的完全矛盾。。。在某些版本中,行为甚至有所不同:您能给我们举一个输入和预期输出的例子吗<代码>°你说得对。这真是太。。。凌乱的好吧,这是经典的Php:mess,mess,mess。我猜他们试图在5.0中修复它(至少我是这样解释版本之间的变化的),但那时人们依赖于错误的行为…所以你的意思是“删除所有不是我想要的字符”?这样的话,我想我不知道在哪里停下来做一个mb_substr($str,$f,1))。。。我需要一个索引才能有一个子字符串(实际上字符串要复杂得多)