Does jquery have parameterize method like in rails parameterize ? I want to parameterize string using jQuery, example :
"Jonh [ Doe ] " => "john-doe"
" John ( Doe )" => "john-doe"
"{ John } Doe / " => "john-doe"
I know that can use toLowerCase()
and .replace()
, but I want best practice to do it. Now I'm use this script
toLowerCase().replace(/\[|\]|\(|\)|\{|\}|\\|\//g, '').replace(/\s/g, '-')
or
toLowerCase().replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-')
But the result look like this
"{ John } Doe / " => "-john--doe--"
Does jquery have parameterize method like in rails parameterize ? I want to parameterize string using jQuery, example :
"Jonh [ Doe ] " => "john-doe"
" John ( Doe )" => "john-doe"
"{ John } Doe / " => "john-doe"
I know that can use toLowerCase()
and .replace()
, but I want best practice to do it. Now I'm use this script
toLowerCase().replace(/\[|\]|\(|\)|\{|\}|\\|\//g, '').replace(/\s/g, '-')
or
toLowerCase().replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-')
But the result look like this
"{ John } Doe / " => "-john--doe--"
Share
Improve this question
edited Jul 20, 2014 at 10:47
user3612645
asked Jul 20, 2014 at 10:40
user3612645user3612645
2374 silver badges12 bronze badges
4
|
2 Answers
Reset to default 22try this and
.toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/(^-|-$)/g,'');
I've written something for this in CoffeeScript, which allows me to remove stopwords as well as remove diacritics (such as ÅË and so on). The diacritics code was taken from this thread.
removeDiacritics = (str) ->
defaultDiacriticsRemovalMap = [
{
'base': 'A'
'letters': /[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g
}
{
'base': 'AA'
'letters': /[\uA732]/g
}
{
'base': 'AE'
'letters': /[\u00C6\u01FC\u01E2]/g
}
{
'base': 'AO'
'letters': /[\uA734]/g
}
{
'base': 'AU'
'letters': /[\uA736]/g
}
{
'base': 'AV'
'letters': /[\uA738\uA73A]/g
}
{
'base': 'AY'
'letters': /[\uA73C]/g
}
{
'base': 'B'
'letters': /[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g
}
{
'base': 'C'
'letters': /[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g
}
{
'base': 'D'
'letters': /[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g
}
{
'base': 'DZ'
'letters': /[\u01F1\u01C4]/g
}
{
'base': 'Dz'
'letters': /[\u01F2\u01C5]/g
}
{
'base': 'E'
'letters': /[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g
}
{
'base': 'F'
'letters': /[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g
}
{
'base': 'G'
'letters': /[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g
}
{
'base': 'H'
'letters': /[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g
}
{
'base': 'I'
'letters': /[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g
}
{
'base': 'J'
'letters': /[\u004A\u24BF\uFF2A\u0134\u0248]/g
}
{
'base': 'K'
'letters': /[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g
}
{
'base': 'L'
'letters': /[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g
}
{
'base': 'LJ'
'letters': /[\u01C7]/g
}
{
'base': 'Lj'
'letters': /[\u01C8]/g
}
{
'base': 'M'
'letters': /[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g
}
{
'base': 'N'
'letters': /[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g
}
{
'base': 'NJ'
'letters': /[\u01CA]/g
}
{
'base': 'Nj'
'letters': /[\u01CB]/g
}
{
'base': 'O'
'letters': /[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g
}
{
'base': 'OI'
'letters': /[\u01A2]/g
}
{
'base': 'OO'
'letters': /[\uA74E]/g
}
{
'base': 'OU'
'letters': /[\u0222]/g
}
{
'base': 'P'
'letters': /[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g
}
{
'base': 'Q'
'letters': /[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g
}
{
'base': 'R'
'letters': /[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g
}
{
'base': 'S'
'letters': /[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g
}
{
'base': 'T'
'letters': /[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g
}
{
'base': 'TZ'
'letters': /[\uA728]/g
}
{
'base': 'U'
'letters': /[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g
}
{
'base': 'V'
'letters': /[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g
}
{
'base': 'VY'
'letters': /[\uA760]/g
}
{
'base': 'W'
'letters': /[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g
}
{
'base': 'X'
'letters': /[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g
}
{
'base': 'Y'
'letters': /[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g
}
{
'base': 'Z'
'letters': /[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g
}
{
'base': 'a'
'letters': /[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g
}
{
'base': 'aa'
'letters': /[\uA733]/g
}
{
'base': 'ae'
'letters': /[\u00E6\u01FD\u01E3]/g
}
{
'base': 'ao'
'letters': /[\uA735]/g
}
{
'base': 'au'
'letters': /[\uA737]/g
}
{
'base': 'av'
'letters': /[\uA739\uA73B]/g
}
{
'base': 'ay'
'letters': /[\uA73D]/g
}
{
'base': 'b'
'letters': /[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g
}
{
'base': 'c'
'letters': /[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g
}
{
'base': 'd'
'letters': /[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g
}
{
'base': 'dz'
'letters': /[\u01F3\u01C6]/g
}
{
'base': 'e'
'letters': /[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g
}
{
'base': 'f'
'letters': /[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g
}
{
'base': 'g'
'letters': /[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g
}
{
'base': 'h'
'letters': /[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g
}
{
'base': 'hv'
'letters': /[\u0195]/g
}
{
'base': 'i'
'letters': /[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g
}
{
'base': 'j'
'letters': /[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g
}
{
'base': 'k'
'letters': /[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g
}
{
'base': 'l'
'letters': /[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g
}
{
'base': 'lj'
'letters': /[\u01C9]/g
}
{
'base': 'm'
'letters': /[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g
}
{
'base': 'n'
'letters': /[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g
}
{
'base': 'nj'
'letters': /[\u01CC]/g
}
{
'base': 'o'
'letters': /[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g
}
{
'base': 'oi'
'letters': /[\u01A3]/g
}
{
'base': 'ou'
'letters': /[\u0223]/g
}
{
'base': 'oo'
'letters': /[\uA74F]/g
}
{
'base': 'p'
'letters': /[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g
}
{
'base': 'q'
'letters': /[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g
}
{
'base': 'r'
'letters': /[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g
}
{
'base': 's'
'letters': /[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g
}
{
'base': 't'
'letters': /[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g
}
{
'base': 'tz'
'letters': /[\uA729]/g
}
{
'base': 'u'
'letters': /[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g
}
{
'base': 'v'
'letters': /[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g
}
{
'base': 'vy'
'letters': /[\uA761]/g
}
{
'base': 'w'
'letters': /[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g
}
{
'base': 'x'
'letters': /[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g
}
{
'base': 'y'
'letters': /[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g
}
{
'base': 'z'
'letters': /[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g
}
]
i = 0
while i < defaultDiacriticsRemovalMap.length
str = str.replace(defaultDiacriticsRemovalMap[i].letters, defaultDiacriticsRemovalMap[i].base)
i++
str
parameterize = ->
# Add any stopwords you'd like to remove from this array
stopWords = ["a", "an", "as", "at", "before", "but", "by", "for", "from", "is", "in", "into", "like", "of", "off", "on", "onto", "per", "since", "than", "the", "this", "that", "to", "up", "via", "with"]
# The element you are taking the initial string from
str = removeDiacritics($('#element').val().toLowerCase())
filteredStr = str.split(' ').filter (word) ->
!stopWords.includes(word) and /[a-z0-9]/.test(word)
(word.replace(/^\s+|\s+$|[^\w]/g, '') for word in filteredStr).join('-')
"{ John } Doe / "
(without quotation mark) output-john-doe-
– user3612645 Commented Jul 20, 2014 at 10:57-
– user3612645 Commented Jul 20, 2014 at 11:00