如何在自动链接标签脚本中对土耳其字母进行正则表达式
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;
}
也许有人需要它。
我有以下代码:
对于用户
@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;
}
也许有人需要它。