如何在自动链接标签脚本中对土耳其字母进行正则表达式

How to regex the Turkish letters in the autolink tag script

我有以下代码:

对于用户

@john -> <a href="homeurl/profile/john">@john</a>

对于标签

#hello -> <a href="homeurl/hashtag/hello">#hello</a>

但在 PHP 主题标签中有土耳其字母(在标题上)。所以 hastags slug 从 (title) 中清除了。土耳其字母替换为基本的拉丁字母。

土耳其字母:ığüşöç İĞÜŞÖÇ

(function($) {
  $.fn.autolink_regex_map = new Array(
    {
      're': /((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g, // URLs
      'replace': '<a rel="nofollow" href=""></a>'
    },
    {
      're': /(([a-z0-9*._+]){1,}\@(([a-z0-9]+[-]?){1,}[a-z0-9]+\.){1,}([a-z]{2,4}|museum)(?![\w\s?&.\/;#~%"=-]*>))/g, // Email addresses
      'replace': '<a rel="nofollow" href="mailto:"></a>'
    },
    {
      're': /(^|\s)@(\w+)/g, // @-mentions
      'replace': '<a rel="author" href="' + homeurl + '/profile/">@</a>'
    },
    {
      're': /(^|\s)#(\w+)/g, // Hashtags
      'replace': '<a rel="search" href="' + homeurl + '/hashtag/">#</a>'
    }
  );

  $.fn.autolink = function() {
    return this.each(function() {
      var $this = $(this);

      $.each($.fn.autolink_regex_map, function(i, obj) {
        $this.html($this.html().replace(obj.re, obj.replace));
      });
    });
  }
})(jQuery);

This image result on following code:

#değilmi -> <a href="homeurl/hashtag/de">#de</a>ğilmi

如何检测土耳其字母以及如何替换 url 例如

<a href="homeurl/hashtag/degilmi">#değilmi</a>

你可以追随Efficiently replace all accented characters in a string?的脚步 并将土耳其语字符翻译成这样的 ASCII 字母:

var makeSortString = (function() {
  var translate_re = /[ığüşöçİĞÜŞÖÇ]/g;
  var translate = {
    "ı": "i", "ğ": "g", "ü": "u", "ş": "s", "ö": "o", "ç": "c",
    "İ": "I", "Ğ": "G", "Ü": "U", "Ş": "S", "Ö": "o", "Ç": "C",
  };
  return function(s) {
    return ( s.replace(translate_re, function(match) { 
      return translate[match]; 
    }) );
  }
})();

但是,如果您可以使用 ECMAScript 6,它会引入方法 String.prototype.normalize() 来为您处理 Unicode 规范化。您可以将它与 unorm 用于普通 JS 的 polyfill 一起使用。

console.log('ığüşöçİĞÜŞÖÇ'.normalize('NFKD'));

对于 slug 我使用的是这个脚本:

var string_to_slug = function (str)
{
    str = str.replace(/^\s+|\s+$/g, ''); // trim
    str = str.toLowerCase();

    // remove accents, swap ñ for n, etc
    var from = "àáäâèéëêìíïîıòóöôùúüûñçşğ·/_,:;";
    var to   = "aaaaeeeeiiiiioooouuuuncsg------";

    for (var i=0, l=from.length ; i<l ; i++)
    {
        str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
    }

    str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
        .replace(/\s+/g, '-') // collapse whitespace and replace by -
        .replace(/-+/g, '-'); // collapse dashes

    return str;
}

也许有人需要它。