使用纯bash创建URL友好的slug?

时间:2017-11-01 08:06:10

标签: bash slug parameter-expansion

我正在使用一种纯粹的bash解决方案来“强化”一个变量,这并不像我的那样难看。

  

slugify :小写,缩短为63字节,除了以外的所有内容   0-9和a-z替换为 - 。没有领先/尾随 - 。结果是适合在URL主机名和域名中使用的字符串。   输入很可能是一系列具有不期望字符的单词,例如:

     

'Effrafax_mUKwT'uP7(Garkbit< \ 1} @NJ “RJ” Hactar * S; -H%×oLazlarl(= ZSS @ C9 qick:???BZarquonelW {X>克@' K'

     

其中一个slug看起来像:   'effrafax-mukwt-UP7-garkbit -1- njrjhactar-S-H-X-olazlarl-ZSS-C9-Q'

slugify () {
  next=${1//+([^A-Za-z0-9])/-}
  next=${next:0:63}
  next=${next,,}
  next=${next#-}
  next=${next%-}
  echo $next
}

为什么${next//^-|-$}不删除前缀和后缀'-'?其他建议?

2 个答案:

答案 0 :(得分:2)

我正在使用此功能,在我的bash配置文件中:

slugify () {
    echo "$1" | iconv -t ascii//TRANSLIT | sed -r s/[~\^]+//g | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z
}

基于:Array.prototype.reduce()

答案 1 :(得分:0)

answer above的OS X和linux兼容版本

slugify () {
    echo "$1" | iconv -c -t ascii//TRANSLIT | sed -E 's/[~^]+//g' | sed -E 's/[^a-zA-Z0-9]+/-/g' | sed -E 's/^-+|-+$//g' | tr A-Z a-z
}