【问题标题】:how to replace special characters only at the beginning and end如何仅在开头和结尾替换特殊字符
【发布时间】:2013-05-31 19:43:33
【问题描述】:

我目前正在使用这段代码来替换特殊字符,我想知道是否有办法只替换第一个和最后一个字符并将它们留在中间。

$name = preg_replace('/[^ \p{L}\p{N} \@ \_ \- \.\#\$\&]/u', '', $name);

谢谢

【问题讨论】:

  • 快速解决方案,开始:$name = preg_replace('/^[^ \p{L}\p{N} \@ \_ \- \.\#\$\&]/u', '', $name);结束$name = preg_replace('/[^ \p{L}\p{N} \@ \_ \- \.\#\$\&]$/u', '', $name);
  • 请注意,[^\p{L}\p{N}] 也会删除组合的变音符号;即 accent 字符与前一个字母组合形成 accented 字母。
  • @Twisted1919,非常感谢,但它不起作用,当我使用名称 A&S 时,回复将是空字符串,我真正需要的是删除 & 如果它出现在开头名称或在最后,但如果它在中间,则保留它,因为它不会影响代码并给出错误
  • @arnaud576875,我真的很抱歉,因为我不是 PHP 方面的专家,所以我真的不知道你说什么:)

标签: php preg-replace


【解决方案1】:

使用$name = preg_replace(array('/^[\W|\d]+/','/[\W|\d]+$/'), '', $name); 这将删除字符串开头和结尾的每个非字母字符(包括重音字符)和数字。如果要保留数字,请删除 |\d 两次。

如果您更喜欢 Unicode 正则表达式(另请阅读:http://www.regular-expressions.info/unicode.html) 试试:$name = preg_replace(array('/^\P{L}+/u','/\P{L}+$/u'), '', $name);

如果您只需要替换一组固定的字符,例如“&-_”,您也可以使用trim()

【讨论】:

  • 如果有一种方法可以启用所有功能而不会导致回复错误,我真的需要帮助,我有一个聊天机器人脚本,如果用户名以标签或 & 或“”开头,它将导致机器人回复空名称,有没有办法在不更换任何东西的情况下解决这个问题?提前谢谢
  • $name=ltrim($name,'&\'"');我不知道“标签”是什么意思?
  • 我的意思是我需要替换 "'& 如果它出现在名称的开头或结尾,但如果有办法显示它们而不会导致错误,我将不胜感激。
  • $name=trim($name,'&\'"');
猜你喜欢
  • 2013-06-13
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多