কীভাবে কোনও শিরোনামকে jQuery এর URL স্লাগে রূপান্তর করবেন?


163

আমি কোডইগনিটারে একটি অ্যাপ্লিকেশনটিতে কাজ করছি এবং আমি ইউআরএল স্লাগকে গতিশীলরূপে একটি ফর্মের জন্য একটি ক্ষেত্র তৈরি করার চেষ্টা করছি। আমি যা করতে চাই তা হ'ল বিরামচিহ্ন মুছে ফেলা, এটিকে ছোট হাতের সাথে রূপান্তর করা এবং হাইফেনের সাহায্যে স্পেসগুলি প্রতিস্থাপন করা। সুতরাং উদাহরণস্বরূপ, শেনের রিব শ্যাক শ্যানস-রিব-শ্যাক হয়ে উঠবে।

আমার এখন পর্যন্ত যা আছে তা এখানে। ছোট হাতের অংশটি সহজ ছিল, তবে প্রতিস্থাপনটি মোটেও কাজ করে বলে মনে হচ্ছে না এবং বিরামচিহ্নগুলি সরাতে আমার কোনও ধারণা নেই:

$("#Restaurant_Name").keyup(function(){
    var Text = $(this).val();
    Text = Text.toLowerCase();
    Text = Text.replace('/\s/g','-');
    $("#Restaurant_Slug").val(Text);    
});

2
JQuery নয়, লাইব্রেরিগুলিতে 'স্পাইনিং' বা 'নোড-স্লাগ' দেখুন
কেভিন হুইলার

উত্তর:


379

'স্লাগ' শব্দটি কোথা থেকে এসেছে তা আমার কোনও ধারণা নেই তবে আমরা এখানে যাচ্ছি:

function convertToSlug(Text)
{
    return Text
        .toLowerCase()
        .replace(/ /g,'-')
        .replace(/[^\w-]+/g,'')
        ;
}

প্রথম প্রতিস্থাপন স্থানগুলিকে হাইফেনে পরিবর্তন করবে, দ্বিতীয় প্রতিস্থাপনটি বর্ণমালা, আন্ডারস্কোর বা হাইফেন নয় এমন কিছু সরিয়ে দেয়।

আপনি যদি "পছন্দসই" জিনিসগুলি না চান তবে এটি "পছন্দসই --- এই" রূপান্তর করছে তবে আপনি পরিবর্তে এটি ব্যবহার করতে পারেন:

function convertToSlug(Text)
{
    return Text
        .toLowerCase()
        .replace(/[^\w ]+/g,'')
        .replace(/ +/g,'-')
        ;
}

এটি প্রথম প্রতিস্থাপনের হাইফেনগুলি সরিয়ে ফেলবে (তবে স্পেস নয়) এবং দ্বিতীয়টি প্রতিস্থাপনে এটি একক হাইফেনের মধ্যে পরপর স্পেসগুলি ঘনীভূত করবে।

সুতরাং "লাইক - এটি" "লাইক-এই" হিসাবে আসে।


1
যোগ করার জন্য "/" aswell যদি আপনি প্রয়োজন বহু ডিরেক্টরি seperated ভুলবেন না
Val,

6
"স্লাগ" শব্দটি ওয়ার্ডপ্রেস থেকে এসেছে
ব্রায়নার ফেরেইরা

18
একাধিক ক্রমযুক্ত হাইফেন এড়ানোর জন্য, আমি text.toLowerCase().replace(/ /g,'-').replace(/[-]+/g, '-').replace(/[^\w-]+/g,'');বিকল্প 2 এর পরিবর্তে ব্যবহার করেছি বিকল্প 2 "ম -" এটি "এটি" তে পরিবর্তিত হবে।
রায়ান অ্যালেন

আমি কীভাবে ইউআরএলটিতে বিন্দুটিকে অনুমতি দেব?
ইদান শেকটার

স্লগে "_" এড়ানোর জন্য .রেপ্লেস (/ + / জি, '-') থেকে .replace (/ + | _ / g, '-') এ ওভাররাইড করুন।
ওডিন থান্ডার

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

  // remove accents, swap ñ for n, etc
  var from = "ãàáäâẽèéëêìíïîõòóöôùúüûñç·/_,:;";
  var to   = "aaaaaeeeeeiiiiooooouuuunc------";
  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;
};

এবং চেষ্টা কর

slug($('#field').val())

মূল দ্বারা: http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/


সম্পাদনা: আরও ভাষা নির্দিষ্ট অক্ষরের জন্য প্রসারিত:

var from = "ÁÄÂÀÃÅČÇĆĎÉĚËÈÊẼĔȆĞÍÌÎÏİŇÑÓÖÒÔÕØŘŔŠŞŤÚŮÜÙÛÝŸŽáäâàãåčçćďéěëèêẽĕȇğíìîïıňñóöòôõøðřŕšşťúůüùûýÿžþÞĐđßÆa·/_,:;";
var to   = "AAAAAACCCDEEEEEEEEGIIIIINNOOOOOORRSSTUUUUUYYZaaaaaacccdeeeeeeeegiiiiinnooooooorrsstuuuuuyyzbBDdBAa------";

6
তবে সঠিকভাবে নয়। জার্মান গ্রন্থে ইন, üউল্লেখ করা আবশ্যক ue, ইত্যাদি
feklee

5
@ ফেকলি: "সঠিকভাবে নয়" জার্মান (এবং সম্ভবত কিছু অন্যান্য ভাষায়) সত্য, তবে অন্যান্য ভাষায় এটি ঠিক আছে। একটি ইংলিশ ওয়েবসাইটের জন্য, আমি চাই জার্মানরা যেমন "মারফেল্ডি" (একটি হাঙ্গেরিয়ান বংশোদ্ভূতের শেষ নাম) "মারফোল্ডি" হিসাবে রূপান্তরিত হবে, এবং "মারফোলেডি" নয়।
মাইকেলস্ট্যাঙ্কো

1
ক্রস-প্ল্যাটফর্মের সামঞ্জস্যতা নিশ্চিত করতে, আপনি = "\ u00E3 \ u00E0 \ u00E1 \ u00E4 \ u00E2 \ u1EBD \ u00E8 \ u00E9 \ u00EB 00 u00E5 \ u00EF \ u00EF \ u00EF 00 u00EF\ u00EF\ u00F6 \ u00F4 \ u00F9 \ u00FA \ u00FC \ u00FB \ u00F1 \ u00E7 \ U00B7 /: _:; ";
মাইক গডিন

1
চমৎকার সমাধান! åযদিও স্ক্যান্ডিনেভিয়ান মিস করছি ।
ফ্রেড্রিক

1
আপনি পরিবর্তনশীলতে যুক্ত İĞŞığşকরতে পারেন fromএবং IGSigsতুরস্কের অক্ষরগুলিকে সমর্থন করতে তাদের রূপান্তর করতে পারেন ।
CemilF

19

প্রথমত, নিয়মিত প্রকাশের আশেপাশের উক্তি থাকা উচিত নয়, তাই '/ \ s / g' হওয়া উচিত / \ S / ছ

সমস্ত অ-অক্ষর অক্ষরকে ড্যাশের সাথে প্রতিস্থাপন করতে, এটি কাজ করা উচিত (আপনার উদাহরণ কোডটি ব্যবহার করে):

$("#Restaurant_Name").keyup(function(){
        var Text = $(this).val();
        Text = Text.toLowerCase();
        Text = Text.replace(/[^a-zA-Z0-9]+/g,'-');
        $("#Restaurant_Slug").val(Text);        
});

এই কৌশলটি করা উচিত ...


8

আমি ইংরেজির জন্য একটি ভাল এবং সম্পূর্ণ সমাধান খুঁজে পেয়েছি

function slugify(string) {
  return string
    .toString()
    .trim()
    .toLowerCase()
    .replace(/\s+/g, "-")
    .replace(/[^\w\-]+/g, "")
    .replace(/\-\-+/g, "-")
    .replace(/^-+/, "")
    .replace(/-+$/, "");
}

এটির ব্যবহারের কয়েকটি উদাহরণ:

slugify(12345);
// "12345"

slugify("  string with leading   and   trailing whitespace    ");
// "string-with-leading-and-trailing-whitespace"

slugify("mIxEd CaSe TiTlE");
// "mixed-case-title"

slugify("string with - existing hyphens -- ");
// "string-with-existing-hyphens"

slugify("string with Special™ characters");
// "string-with-special-characters"

অ্যান্ড্রু স্টুয়ার্টকে ধন্যবাদ


8

আশা করি এটি কারও দিন বাঁচাতে পারে ...

/* Encode string to slug */
function convertToSlug( str ) {
	
  //replace all special characters | symbols with a space
  str = str.replace(/[`~!@#$%^&*()_\-+=\[\]{};:'"\\|\/,.<>?\s]/g, ' ').toLowerCase();
	
  // trim spaces at start and end of string
  str = str.replace(/^\s+|\s+$/gm,'');
	
  // replace space with dash/hyphen
  str = str.replace(/\s+/g, '-');	
  document.getElementById("slug-text").innerHTML= str;
  //return str;
}
<input type="text" onload="convertToSlug(this.value)" onkeyup="convertToSlug(this.value)" value="Try it Yourself"/>
<p id="slug-text"></p>


7

আপনার যা দরকার তা হ'ল একটি প্লাস :)

$("#Restaurant_Name").keyup(function(){
        var Text = $(this).val();
        Text = Text.toLowerCase();
        var regExp = /\s+/g;
        Text = Text.replace(regExp,'-');
        $("#Restaurant_Slug").val(Text);        
});

6

শ্যান মারফি দ্বারা প্রস্তুত হওয়া ইউআরএলগুলি স্যানিটাইজ করতে এই স্লাগ ফাংশনটি একবার দেখুন, https://gist.github.com/sgmurphy/3095196

/**
 * Create a web friendly URL slug from a string.
 *
 * Requires XRegExp (http://xregexp.com) with unicode add-ons for UTF-8 support.
 *
 * Although supported, transliteration is discouraged because
 *     1) most web browsers support UTF-8 characters in URLs
 *     2) transliteration causes a loss of information
 *
 * @author Sean Murphy <sean@iamseanmurphy.com>
 * @copyright Copyright 2012 Sean Murphy. All rights reserved.
 * @license http://creativecommons.org/publicdomain/zero/1.0/
 *
 * @param string s
 * @param object opt
 * @return string
 */
function url_slug(s, opt) {
    s = String(s);
    opt = Object(opt);

    var defaults = {
        'delimiter': '-',
        'limit': undefined,
        'lowercase': true,
        'replacements': {},
        'transliterate': (typeof(XRegExp) === 'undefined') ? true : false
    };

    // Merge options
    for (var k in defaults) {
        if (!opt.hasOwnProperty(k)) {
            opt[k] = defaults[k];
        }
    }

    var char_map = {
        // Latin
        'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç': 'C', 
        'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I', 'Ï': 'I', 
        'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 
        'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 
        'ß': 'ss', 
        'à': 'a', 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 
        'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', 
        'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o', 
        'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ': 'th', 
        'ÿ': 'y',

        // Latin symbols
        '©': '(c)',

        // Greek
        'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', 'Η': 'H', 'Θ': '8',
        'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', 'Ξ': '3', 'Ο': 'O', 'Π': 'P',
        'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W',
        'Ά': 'A', 'Έ': 'E', 'Ί': 'I', 'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I',
        'Ϋ': 'Y',
        'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', 'θ': '8',
        'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', 'ο': 'o', 'π': 'p',
        'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', 'χ': 'x', 'ψ': 'ps', 'ω': 'w',
        'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o', 'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's',
        'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y', 'ΐ': 'i',

        // Turkish
        'Ş': 'S', 'İ': 'I', 'Ç': 'C', 'Ü': 'U', 'Ö': 'O', 'Ğ': 'G',
        'ş': 's', 'ı': 'i', 'ç': 'c', 'ü': 'u', 'ö': 'o', 'ğ': 'g', 

        // Russian
        'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo', 'Ж': 'Zh',
        'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', 'Н': 'N', 'О': 'O',
        'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', 'Ф': 'F', 'Х': 'H', 'Ц': 'C',
        'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu',
        'Я': 'Ya',
        'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', 'ж': 'zh',
        'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o',
        'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'h', 'ц': 'c',
        'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu',
        'я': 'ya',

        // Ukrainian
        'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G',
        'є': 'ye', 'і': 'i', 'ї': 'yi', 'ґ': 'g',

        // Czech
        'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', 'Š': 'S', 'Ť': 'T', 'Ů': 'U', 
        'Ž': 'Z', 
        'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', 'ů': 'u',
        'ž': 'z', 

        // Polish
        'Ą': 'A', 'Ć': 'C', 'Ę': 'e', 'Ł': 'L', 'Ń': 'N', 'Ó': 'o', 'Ś': 'S', 'Ź': 'Z', 
        'Ż': 'Z', 
        'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', 'ź': 'z',
        'ż': 'z',

        // Latvian
        'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'i', 'Ķ': 'k', 'Ļ': 'L', 'Ņ': 'N', 
        'Š': 'S', 'Ū': 'u', 'Ž': 'Z', 
        'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l', 'ņ': 'n',
        'š': 's', 'ū': 'u', 'ž': 'z'
    };

    // Make custom replacements
    for (var k in opt.replacements) {
        s = s.replace(RegExp(k, 'g'), opt.replacements[k]);
    }

    // Transliterate characters to ASCII
    if (opt.transliterate) {
        for (var k in char_map) {
            s = s.replace(RegExp(k, 'g'), char_map[k]);
        }
    }

    // Replace non-alphanumeric characters with our delimiter
    var alnum = (typeof(XRegExp) === 'undefined') ? RegExp('[^a-z0-9]+', 'ig') : XRegExp('[^\\p{L}\\p{N}]+', 'ig');
    s = s.replace(alnum, opt.delimiter);

    // Remove duplicate delimiters
    s = s.replace(RegExp('[' + opt.delimiter + ']{2,}', 'g'), opt.delimiter);

    // Truncate slug to max. characters
    s = s.substring(0, opt.limit);

    // Remove delimiter from ends
    s = s.replace(RegExp('(^' + opt.delimiter + '|' + opt.delimiter + '$)', 'g'), '');

    return opt.lowercase ? s.toLowerCase() : s;
}

1
শুরুতে কেউ বলেছিলেন "এটি আইই ১১-ব্রাউজারগুলিতে কঠোরভাবে ব্যবহারের সাথে কাজ করবে না - চর_ম্যাপ অবজেক্টে নকলের কারণে।"
বিবিসিঞ্জার


3
function slugify(text){
  return text.toString().toLowerCase()
    .replace(/\s+/g, '-')           // Replace spaces with -
    .replace(/[^\u0100-\uFFFF\w\-]/g,'-') // Remove all non-word chars ( fix for UTF-8 chars )
    .replace(/\-\-+/g, '-')         // Replace multiple - with single -
    .replace(/^-+/, '')             // Trim - from start of text
    .replace(/-+$/, '');            // Trim - from end of text
}

* ভিত্তিক https://gist.github.com/mathewbyrne/1280286 এর

এখন আপনি এই স্ট্রিংটি রূপান্তর করতে পারেন:

Barack_Obama       Барак_Обама ~!@#$%^&*()+/-+?><:";'{}[]\|`

মধ্যে:

barack_obama-барак_обама

আপনার কোড প্রয়োগ করা:

$("#Restaurant_Name").keyup(function(){
    var Text = $(this).val();
    Text = slugify(Text);
    $("#Restaurant_Slug").val(Text);
});

কেন এটি সঠিক উত্তর হিসাবে নির্বাচিত হয়নি তা নিশ্চিত নয়। উত্তরগুলির মধ্যে অনেকগুলি # বা মুছে ফেলার বিষয়ে বিশ্বাস করে না? স্লাগ থেকে - URL টি এইভাবে ক্ষতিগ্রস্থ হবে। এমনকি শীর্ষ-ব্যবহৃত প্রতিক্রিয়া পাঠাগারগুলিতে এই বৈশিষ্ট্যটি প্রয়োগ করা হয়নি। এই উত্তরটি খুব সাধারণ, তবুও সর্বজনীন।
ভ্লাদিমির মার্টন

3

এখানে উত্তর থেকে বিভিন্ন উপাদানের একত্রিত করা স্বাভাবিকের সাথে ভাল কভারেজ সরবরাহ করে। ক্রমবর্ধমান ইউআরএল পরিষ্কার করার জন্য ক্রিয়াকলাপের ক্রম রাখুন।

function clean_url(s) {
    return s.toString().normalize('NFD').replace(/[\u0300-\u036f]/g, "") //remove diacritics
            .toLowerCase()
            .replace(/\s+/g, '-') //spaces to dashes
            .replace(/&/g, '-and-') //ampersand to and
            .replace(/[^\w\-]+/g, '') //remove non-words
            .replace(/\-\-+/g, '-') //collapse multiple dashes
            .replace(/^-+/, '') //trim starting dash
            .replace(/-+$/, ''); //trim ending dash
}

normlize('NFD')তাদের উপাদানগুলিতে উচ্চারণযুক্ত অক্ষরগুলি ভেঙে দেয়, এটি হ'ল মৌলিক অক্ষর এবং ডায়াক্রিটিক্স (অ্যাকসেন্ট অংশ)। replace(/[\u0300-\u036f]/g, "")সমস্ত চিরাচরিতকে মুছে ফেলে, নিজেরাই প্রাথমিক চিঠিগুলি রেখে। বাকিগুলি ইনলাইন মন্তব্যে ব্যাখ্যা করা হয়েছে।


1
তোমাকে ধন্যবাদ. এটি সহজ এবং আমার পরীক্ষার ক্ষেত্রে ভাল কাজ করে। এমনকি ভিয়েতনামি চরিত্র `` `কনট টেস্ট কেসগুলি = [{ইনপুট: 'এটি কি ভাল স্লাগ', প্রত্যাশা করুন: 'এটি-এটি-একটি-ভাল-স্লাগ'}, {ইনপুট: '----- হয় --- --it ----- a ----- ভাল ----- স্লাগ ----- ', প্রত্যাশা:' is-it-a-good-slug '}, {ইনপুট:' CÔNG cha như নি থি সান ', প্রত্যাশা করুন:' কংগ্রে-চা-নু-নুই-থাই-পুত্র '}, {ইনপুট:' -হাহা - নহিত-নুগায়ান ', প্রত্যাশা:' হা-নাহাত-নুগুইন '}] `` `
ফ্যাট ট্রান কি

1

আপনি এই জন্য আপনার নিজের ফাংশন ব্যবহার করতে পারেন।

এটি ব্যবহার করে দেখুন: http://jsfiddle.net/xstLr7aj/

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

  // remove accents, swap ñ for n, etc
  var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;";
  var to   = "aaaaeeeeiiiioooouuuunc------";
  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;
}
$(document).ready(function() {
    $('#test').submit(function(){
        var val = string_to_slug($('#t').val());
        alert(val);
        return false;
    });
});

উপরের সর্বোচ্চ ভোট দেওয়া উত্তর থেকে এই সমাধানের মধ্যে কী পার্থক্য রয়েছে?
নীলসি

কোড এখানে আপডেট, শেষ অক্ষর মুছে ফেলার জন্য যদি "-" jsfiddle.net/xstLr7aj/36
MGE

1

স্বীকৃত উত্তরটি আমার প্রয়োজনগুলি পূরণ করে না (এটি আন্ডারস্কোরগুলিকে অনুমতি দেয়, শুরু এবং শেষের দিকে ড্যাশগুলি পরিচালনা করে না ইত্যাদি), এবং অন্যান্য উত্তরে অন্যান্য সমস্যা রয়েছে যা আমার ব্যবহারের ক্ষেত্রে উপযুক্ত নয়, সুতরাং এখানে স্লগাইফাই ফাংশনটি দেওয়া হয়েছে আমি সাথে এসেছি:

function slugify(string) {
    return string.trim() // Remove surrounding whitespace.
    .toLowerCase() // Lowercase.
    .replace(/[^a-z0-9]+/g,'-') // Find everything that is not a lowercase letter or number, one or more times, globally, and replace it with a dash.
    .replace(/^-+/, '') // Remove all dashes from the beginning of the string.
    .replace(/-+$/, ''); // Remove all dashes from the end of the string.
}

এটি 'foo !!! বার_-_-_ বাজ-' তে পরিণত করবে (শুরুতে স্থানটি নোট করুন) foo-bar-baz



1

তবুও অন্য একটি। সংক্ষিপ্ত এবং বিশেষ অক্ষর রাখে:

imaginação é mato => কল্পনাচো-ই-মাটো

function slugify (text) {
  const a = 'àáäâãèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;'
  const b = 'aaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------'
  const p = new RegExp(a.split('').join('|'), 'g')

  return text.toString().toLowerCase()
    .replace(/\s+/g, '-')           // Replace spaces with -
    .replace(p, c =>
        b.charAt(a.indexOf(c)))     // Replace special chars
    .replace(/&/g, '-and-')         // Replace & with 'and'
    .replace(/[^\w\-]+/g, '')       // Remove all non-word chars
    .replace(/\-\-+/g, '-')         // Replace multiple - with single -
    .replace(/^-+/, '')             // Trim - from start of text
    .replace(/-+$/, '')             // Trim - from end of text
}

1

খাঁটি জাভাস্ক্রিপ্টে আরও শক্তিশালী স্লাগ জেনারেশন পদ্ধতি। এটি মূলত সমস্ত সিরিলিক চরিত্র এবং অনেক উমলৌতের (জার্মান, ডেনিশ, ফ্রান্স, তুর্কি, ইউক্রেনীয় এবং অন্যান্য) জন্য লিখিত লিখিতভাবে সমর্থন করে তবে সহজেই প্রসারিত হতে পারে।

function makeSlug(str)
{
  var from="а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ā ą ä á à â å č ć ē ę ě é è ê æ ģ ğ ö ó ø ǿ ô ő ḿ ʼn ń ṕ ŕ ş ü ß ř ł đ þ ĥ ḧ ī ï í î ĵ ķ ł ņ ń ň ř š ś ť ů ú û ứ ù ü ű ū ý ÿ ž ź ż ç є ґ".split(' ');
  var to=  "a b v g d e e zh z i y k l m n o p r s t u f h ts ch sh shch # y # e yu ya a a ae a a a a c c e e e e e e e g g oe o o o o o m n n p r s ue ss r l d th h h i i i i j k l n n n r s s t u u u u u u u u y y z z z c ye g".split(' ');
	
  str = str.toLowerCase();
  
  // remove simple HTML tags
  str = str.replace(/(<[a-z0-9\-]{1,15}[\s]*>)/gi, '');
  str = str.replace(/(<\/[a-z0-9\-]{1,15}[\s]*>)/gi, '');
  str = str.replace(/(<[a-z0-9\-]{1,15}[\s]*\/>)/gi, '');
  
  str = str.replace(/^\s+|\s+$/gm,''); // trim spaces
  
  for(i=0; i<from.length; ++i)
    str = str.split(from[i]).join(to[i]);
  
  // Replace different kind of spaces with dashes
  var spaces = [/(&nbsp;|&#160;|&#32;)/gi, /(&mdash;|&ndash;|&#8209;)/gi,
     /[(_|=|\\|\,|\.|!)]+/gi, /\s/gi];

  for(i=0; i<from.length; ++i)
  	str = str.replace(spaces[i], '-');
  str = str.replace(/-{2,}/g, "-");

  // remove special chars like &amp;
  str = str.replace(/&[a-z]{2,7};/gi, '');
  str = str.replace(/&#[0-9]{1,6};/gi, '');
  str = str.replace(/&#x[0-9a-f]{1,6};/gi, '');
  
  str = str.replace(/[^a-z0-9\-]+/gmi, ""); // remove all other stuff
  str = str.replace(/^\-+|\-+$/gm,''); // trim edges
  
  return str;
};


document.getElementsByTagName('pre')[0].innerHTML = makeSlug(" <br/> &#x202A;Про&amp;вер<strong>ка_тран</strong>с…литеърьации\rюга\nи&ndash;южного&nbsp;округа\t \nс\tёжикам&#180;и&nbsp;со\\всеми&ndash;друзьями\tтоже.Danke schön!ich heiße=КáÞÿá-Skånske,København çağatay rí gé tőr zöldülésetekről - . ");
<div>
  <pre>Hello world!</pre>
</div>


1

ইতিমধ্যে ব্যবহার করা লোকদের জন্য lodash

এই উদাহরণগুলির বেশিরভাগই সত্যই ভাল এবং অনেকগুলি কেস কভার করে। তবে আপনি যদি জানেন যে আপনার কাছে কেবল ইংরেজী পাঠ্য রয়েছে তবে এখানে আমার সংস্করণটি পড়তে পারা খুব সহজ :)

_.words(_.toLower(text)).join('-')


1

ঠিক আছে, উত্তরগুলি পড়ার পরে, আমি এইটি নিয়ে এসেছি।

    const generateSlug = (text) => text.toLowerCase().trim().replace(/[^\w- ]+/g, '').replace(/ /g, '-').replace(/[-]+/g, '-');

1

দ্রষ্টব্য: আপনি যদি স্বীকৃত উত্তরের বিরুদ্ধে কোন যুক্তির বিষয়ে চিন্তা না করেন এবং কেবল উত্তর খুঁজছেন, তবে পরবর্তী বিভাগটি এড়িয়ে যান, আপনি আমার প্রস্তাবিত উত্তরটি শেষে পাবেন

গৃহীত উত্তরের কয়েকটি সমস্যা রয়েছে (আমার মতে):

1) প্রথম ফাংশন স্নিপেট হিসাবে:

একাধিক পরপর সাদা স্থানের জন্য কোন গুরুত্ব নেই regard

ইনপুট: is it a good slug

পেয়েছেন: ---is---it---a---good---slug---

প্রত্যাশিত: is-it-a-good-slug

একাধিক টানা ড্যাশগুলির জন্য কোন গুরুত্ব নেই

ইনপুট: -----is-----it-----a-----good-----slug-----

পেয়েছেন: -----is-----it-----a-----good-----slug-----

প্রত্যাশিত: is-it-a-good-slug

দয়া করে নোট করুন যে এই বাস্তবায়ন বহিরাগত ড্যাশগুলি হ্যান্ডেল করে না (বা এই বিষয়টির জন্য শ্বেতস্থান) তারা একাধিক ধারাবাহিক বা একক অক্ষর যা (যতদূর আমি স্লাগগুলি বুঝতে পারি, এবং তাদের ব্যবহারগুলি) বৈধ নয়

2) দ্বিতীয় ফাংশন স্নিপেট হিসাবে:

এটি একাধিক পরপর শ্বেত স্পেসগুলিকে একক রূপান্তর করে যত্ন করে -তবে এটি বাহ্যিক হিসাবে যথেষ্ট নয় (স্ট্রিংয়ের শুরু এবং শেষে) সাদা স্থানগুলি একই হ্যান্ডেল করা হয়, তাই is it a good slugফিরে আসবে-is-it-a-good-slug-

এটি ইনপুট থেকে ড্যাশগুলি পুরোপুরি সরিয়ে দেয় যা কিছু পছন্দ --is--it--a--good--slug--'করেisitagoodslug , @ রায়ান-অ্যালেনের মন্তব্যে স্নিপেট এটি যত্ন নিয়েছে, যদিও বাইরের ড্যাশ ইস্যুকে সমাধান না করেই ছেড়ে দেওয়া হয়েছে

এখন আমি জানি যে স্লাগগুলির জন্য কোনও মানক সংজ্ঞা নেই, এবং স্বীকৃত উত্তরটি কাজটি পেতে পারে (যে প্রশ্ন ব্যবহারকারী পোস্ট করেছেন এটি সেক্ষেত্রে), তবে এটি জেএসের স্লাগস সম্পর্কে সর্বাধিক জনপ্রিয় এসও প্রশ্ন, সুতরাং এই সমস্যাগুলি চিহ্নিত করতে হবে, এছাড়াও ( কাজটি সম্পন্ন করার বিষয়ে ! ) একটি ইউআরএল ( www.blog.com/posts/-----how-----to-----slugify-----a-----string-----) এর এই ঘৃণ্য টাইপটি টাইপ করে কল্পনা করুন ( ) অথবা এমন কি ( ) এর পরিবর্তে কেবল এটি পুনঃনির্দেশ করা হবে www.blog.com/posts/how-to-slugify-a-string, আমি জানি এটি একটি চরম ঘটনা তবে আরে সেটাই পরীক্ষা জন্য.

আমার মতে আরও ভাল সমাধান হ'ল নিম্নরূপ:

const slugify = str =>
  str
  .trim()                      // remove whitespaces at the start and end of string
  .toLowerCase()              
  .replace(/^-+/g, "")         // remove one or more dash at the start of the string
  .replace(/[^\w-]+/g, "-")    // convert any on-alphanumeric character to a dash
  .replace(/-+/g, "-")         // convert consecutive dashes to singuar one
  .replace(/-+$/g, "");        // remove one or more dash at the end of the string

এখন সেখানে সম্ভবত একটি রেজিএক্সপ নিনজা রয়েছে যা এটিকে ওয়ান-লাইন এক্সপ্রেশনে রূপান্তর করতে পারে, আমি রেজিপ্স্পের বিশেষজ্ঞ নই এবং আমি বলছি না যে এটি সেরা বা সবচেয়ে কমপ্যাক্ট সমাধান বা সেরা পারফরম্যান্স সহ একটি তবে আশা করি এটি কাজটি করতে পারে।


এর একটি ত্রুটি রয়েছে যেখানে অ-অক্ষরীয় অক্ষরগুলি ড্যাশে রূপান্তর করা লাইনের শুরুতে ড্যাশ পুনরায় ফিরিয়ে আনবে। তবে দয়া করে এটি ওয়ান লাইনার তৈরি করবেন না। এই এক বোঝা সহজ!
টিমো

1
$("#Restaurant_Name").keyup(function(){
        var Text = $(this).val();
        Text = Text.toLowerCase();
        Text = Text.replace(/[^a-zA-Z0-9]+/g,'-');
        $("#Restaurant_Slug").val(Text);        
});

এই কোডটি কাজ করছে


ধন্যবাদ! এটি ব্যবহার করা সহজ।
জেন ডো

0
//
//  jQuery Slug Plugin by Perry Trinier (perrytrinier@gmail.com)
//  MIT License: http://www.opensource.org/licenses/mit-license.php

jQuery.fn.slug = function(options) {
var settings = {
    slug: 'slug', // Class used for slug destination input and span. The span is created on $(document).ready() 
    hide: true   // Boolean - By default the slug input field is hidden, set to false to show the input field and hide the span. 
};

if(options) {
    jQuery.extend(settings, options);
}

$this = $(this);

$(document).ready( function() {
    if (settings.hide) {
        $('input.' + settings.slug).after("<span class="+settings.slug+"></span>");
        $('input.' + settings.slug).hide();
    }
});

makeSlug = function() {
        var slug = jQuery.trim($this.val()) // Trimming recommended by Brooke Dukes - http://www.thewebsitetailor.com/2008/04/jquery-slug-plugin/comment-page-1/#comment-23
                    .replace(/\s+/g,'-').replace(/[^a-zA-Z0-9\-]/g,'').toLowerCase() // See http://www.djangosnippets.org/snippets/1488/ 
                    .replace(/\-{2,}/g,'-'); // If we end up with any 'multiple hyphens', replace with just one. Temporary bugfix for input 'this & that'=>'this--that'
        $('input.' + settings.slug).val(slug);
        $('span.' + settings.slug).text(slug);

    }

$(this).keyup(makeSlug);

return $this;
    };

এই একই সমস্যা সাহায্য করেছে!



-5
private string ToSeoFriendly(string title, int maxLength) {
    var match = Regex.Match(title.ToLower(), "[\\w]+");
    StringBuilder result = new StringBuilder("");
    bool maxLengthHit = false;
    while (match.Success && !maxLengthHit) {
        if (result.Length + match.Value.Length <= maxLength) {
            result.Append(match.Value + "-");
        } else {
            maxLengthHit = true;
            // Handle a situation where there is only one word and it is greater than the max length.
            if (result.Length == 0) result.Append(match.Value.Substring(0, maxLength));
        }
        match = match.NextMatch();
    }
    // Remove trailing '-'
    if (result[result.Length - 1] == '-') result.Remove(result.Length - 1, 1);
    return result.ToString();
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.