1 个字符串的正则表达式问题

regular express issue with 1 character string

我只允许在字符串中使用 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 的多个版本

您正在删除字符串中除 ASCII 字母、数字、_- 以外的任何字符。您需要删除锚并将正字符 class 转换为否定字符:

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

参见PHP demo online and a regex demo

详情

  • [^ - negated character class 的开始
    • \w - 一个单词字符:字母、数字或 _
    • - - 一个连字符
  • ] - 字符结束 class
  • + - 量词:重复 1 次或多次。