我得到一个包含"@string.number (other stuff)"
的字符串。
我想从开始+ 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";'
我想优化它。 你会怎么做?
答案 0 :(得分:0)
为什么不使用preg_replace
示例:
$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;
}
答案 1 :(得分:0)
您可以将其替换为允许的字符,例如a
。这样,字符串永远不会为空。
旁注:听到ctype_alnum("")
返回false
,我感到震惊(但并不感到惊讶)。这完全与手册所说的相矛盾......在某些版本中,行为甚至有所不同:http://3v4l.org/IEtdi