常规快递问题,1个字符串

问题描述 投票:-1回答:1

我只允许在字符串中使用alpha-numeric_-值并删除所有其他字符。它的工作正常,但当字符串大小为1个字符(无关紧要alphabetnumeric_-)时,我得到空值而不是单个包机。

这是示例代码

$str = 1;
$str = preg_replace('/^[a-zA-Z0-9_-]$/', '', $str);
var_dump($str);

要么

$str = 'a';
$str = preg_replace('/^[a-zA-Z0-9_-]$/', '', $str);
var_dump($str);

我已经测试了PHP的这个多个版本

php regex preg-replace
1个回答
1
投票

您将删除字符串内任何位置除ASCII字母,数字,_-之外的任何字符。您需要删除锚点并将正面角色类转换为否定角色:

$str = preg_replace('/[^\w-]+/', '', $str);

查看PHP demo onlineregex demo

细节

  • [^ - negated character class的开始 \w - 一个字char:字母,数字或_ - - 连字符
  • ] - 角色类的结尾
  • + - 量词:重复1次或更多次。
© www.soinside.com 2019 - 2024. All rights reserved.