用下划线替换一个或多个单词字符

发布于 2024-10-18 10:03:36 字数 179 浏览 7 评论 0原文

我只需要允许字母、数字和下划线(_)。

其他任何内容都应替换为单个下划线符号 (_)。

我的正则表达式模式有什么问题?

$val = 'dasd Wsd 23 /*~`';
$k = preg_replace('/[a-Z0-9_]+$/', '_', $val);

I need to allow only letter, numbers, and underscores(_).

Anything else should be replaced a single underscore symbol ( _ ).

What's wrong with my regex pattern?

$val = 'dasd Wsd 23 /*~`';
$k = preg_replace('/[a-Z0-9_]+$/', '_', $val);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

×纯※雪 2024-10-25 10:03:36

您需要添加 ^ 来反转字符类中匹配的字符。

$val = 'dasd Wsd 23 /*~`';
$k = preg_replace('/[^a-zA-Z0-9_]/', '_', $val);

另一种方法是让它匹配非“单词”字符,即非字母、数字或下划线的任何字符。

$val = 'dasd Wsd 23 /*~`';
$k = preg_replace('/\W/', '_', $val);

You needed to add the ^ which inverts the characters that are matched inside the character class.

$val = 'dasd Wsd 23 /*~`';
$k = preg_replace('/[^a-zA-Z0-9_]/', '_', $val);

Another way to do it is to have it match non "word" characters, which is anything that isn't a letter, number, or underscore.

$val = 'dasd Wsd 23 /*~`';
$k = preg_replace('/\W/', '_', $val);
眸中客 2024-10-25 10:03:36

[aZ] 不匹配任何内容。您可以使用 \W 来匹配非单词字符:

preg_replace('/\W+/', '_', $ val)

此外,$ 符号仅匹配字符串末尾。

[a-Z] matches nothing.. You can use \W to match non-word chars:

preg_replace('/\W+/', '_', $val)

Additionally the $ sign only matches at the end of a string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文