code_junkie

Efficiently replace all accented characters in a string?

Nov 12th, 2011
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. str.translate()
  2.  
  3. // s would be a rather short string (something like
  4. // 200 characters at max, most of the time much less)
  5. function makeSortString(s) {
  6. var translate = {
  7. "ä": "a", "ö": "o", "ü": "u",
  8. "Ä": "A", "Ö": "O", "Ü": "U" // probably more to come
  9. };
  10. var translate_re = /[öäüÖÄÜ]/g;
  11. return ( s.replace(translate_re, function(match) {
  12. return translate[match];
  13. }) );
  14. }
  15.  
  16. function makeSortString(s) {
  17. if(!makeSortString.translate_re) makeSortString.translate_re = /[öäüÖÄÜ]/g;
  18. var translate = {
  19. "ä": "a", "ö": "o", "ü": "u",
  20. "Ä": "A", "Ö": "O", "Ü": "U" // probably more to come
  21. };
  22. return ( s.replace(makeSortString.translate_re, function(match) {
  23. return translate[match];
  24. }) );
  25. }
  26.  
  27. makeSortString.translate_re = /[a-z]/g;
  28.  
  29. var makeSortString = (function() {
  30. var translate_re = /[öäüÖÄÜ]/g;
  31. return function(s) {
  32. var translate = {
  33. "ä": "a", "ö": "o", "ü": "u",
  34. "Ä": "A", "Ö": "O", "Ü": "U" // probably more to come
  35. };
  36. return ( s.replace(translate_re, function(match) {
  37. return translate[match];
  38. }) );
  39. }
  40. })();
  41.  
  42. var makeSortString = (function() {
  43. var translate_re = /[öäüÖÄÜ]/g;
  44. var translate = {
  45. "ä": "a", "ö": "o", "ü": "u",
  46. "Ä": "A", "Ö": "O", "Ü": "U" // probably more to come
  47. };
  48. return function(s) {
  49. return ( s.replace(translate_re, function(match) {
  50. return translate[match];
  51. }) );
  52. }
  53. })();
  54.  
  55. // file encoding must be UTF-8!
  56. function getTextExtractor()
  57. {
  58. return (function() {
  59. var patternLetters = /[öäüÖÄÜáàâéèêúùûóòôÁÀÂÉÈÊÚÙÛÓÒÔß]/g;
  60. var patternDateDmy = /^(?:D+)?(d{1,2}).(d{1,2}).(d{2,4})$/;
  61. var lookupLetters = {
  62. "ä": "a", "ö": "o", "ü": "u",
  63. "Ä": "A", "Ö": "O", "Ü": "U",
  64. "á": "a", "à": "a", "â": "a",
  65. "é": "e", "è": "e", "ê": "e",
  66. "ú": "u", "ù": "u", "û": "u",
  67. "ó": "o", "ò": "o", "ô": "o",
  68. "Á": "A", "À": "A", "Â": "A",
  69. "É": "E", "È": "E", "Ê": "E",
  70. "Ú": "U", "Ù": "U", "Û": "U",
  71. "Ó": "O", "Ò": "O", "Ô": "O",
  72. "ß": "s"
  73. };
  74. var letterTranslator = function(match) {
  75. return lookupLetters[match] || match;
  76. }
  77.  
  78. return function(node) {
  79. var text = $.trim($(node).text());
  80. var date = text.match(patternDateDmy);
  81. if (date)
  82. return [date[3], date[2], date[1]].join("-");
  83. else
  84. return text.replace(patternLetters, letterTranslator);
  85. }
  86. })();
  87. }
  88.  
  89. $("table.sortable").tablesorter({
  90. textExtraction: getTextExtractor()
  91. });
  92.  
  93. String.prototype.strip = function() {
  94. var translate_re = /[öäüÖÄÜß ]/g;
  95. var translate = {
  96. "ä":"a", "ö":"o", "ü":"u",
  97. "Ä":"A", "Ö":"O", "Ü":"U",
  98. " ":"_", "ß":"ss" // probably more to come
  99. };
  100. return (this.replace(translate_re, function(match){
  101. return translate[match];})
  102. );
  103. };
  104.  
  105. var teststring = 'ä ö ü Ä Ö Ü ß';
  106. teststring.strip();
Add Comment
Please, Sign In to add comment