用下划线替换一个或多个单词字符
我只需要允许字母、数字和下划线(_)。
其他任何内容都应替换为单个下划线符号 (_)。
我的正则表达式模式有什么问题?
$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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要添加
^
来反转字符类中匹配的字符。另一种方法是让它匹配非“单词”字符,即非字母、数字或下划线的任何字符。
You needed to add the
^
which inverts the characters that are matched inside the character class.Another way to do it is to have it match non "word" characters, which is anything that isn't a letter, number, or underscore.
[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.