如何删除除字母数字和下划线和短划线以外的所有字符?

Sta*_*ann 7 php pcre

我不是正则表达式的专家:(我试图从字符串中删除所有字符,除了alpanumeric和下划线和破折号.这是正确的语法吗?:

preg_replace("/[^a-z0-9_-]+/i", "", $string);
Run Code Online (Sandbox Code Playgroud)

lon*_*day 20

是的,但它可以稍微优化:

preg_replace('/[^\w-]/', '', $string);
Run Code Online (Sandbox Code Playgroud)

\w匹配字母数字字符和下划线.如果您的语言环境允许,这还具有允许重音字符的附加优势.