Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как лучше сделать функцию обработки строки (https://javascript.ru/forum/misc/57398-kak-luchshe-sdelat-funkciyu-obrabotki-stroki.html)

Palama 02.08.2015 14:29

Как лучше сделать функцию обработки строки
 
Допустим есть потребность вывести спецсимволы.
можно сделать так
var entityMap = {
    "&": "&",
    "<": "&lt;",
    ">": "&gt;",
    '"': '&quot;',
    "'": '&#39;',
    "/": '&#x2F;'
  };

  function escapeHtml(string) {
    return String(string).replace(/[&<>"'\/]/g, function (s) {
      return entityMap[s];
    });
  }

alert(escapeHtml('<html>'));

т.е. объявились две левые сущности в пространстве имён

Вопрос: не лучше ли сделать так? В чем минусы такого способа?

String.prototype.escapeChars = function() { 
	String.prototype.entityMap = String.prototype.entityMap || {
		"&": "&amp;",
		"<": "&lt;",
		">": "&gt;",
		'"': '&quot;',
		"'": '&#39;',
		"/": '&#x2F;'
	 };
	return this.replace(/[&<>"'\/]/g, function (s) {return String.prototype.entityMap[s];});
}
  
alert('<html>'.escapeChars());

рони 02.08.2015 15:40

Цитата:

Сообщение от Palama
В чем минусы такого способа?

в нарушении синтаксиса

Palama 02.08.2015 22:43

это на этом прекрасном форуме нарушение синтаксиса, после того как делаешь предварительный просмотр и сохраняешь пост,
&#39;
заменяется на апостроф и скрипт становится неработоспособным.

я конечно оценил юмор ответа, но по существу есть что-нибудь? Где все эти господа теоретики, любители красоты кода?

Deff 02.08.2015 23:24

Palama,
Если код для внутреннего потребления, оберните всё в аноним
(function() {
var entityMap = {
    "&": "&amp;",
    "<": "&lt;",
    ">": "&gt;",
    '"': '&quot;',
    "'": '&#39;',
    "/": '&#x2F;'
  };

  function escapeHtml(string) {
    return String(string).replace(/[&<>"'\/]/g, function (s) {
      return entityMap[s];
    });
  }

alert(escapeHtml('<html>'));

}());

Если для наружного, типично вводят единый объект для сайта/форума, к примеру:
var FORUM = {}

И привязываются к нему,(те же BB-коды)
FORUM.BB_code={};FORUM.BB_code['B'];FORUM.BB_code['URL'];


Часовой пояс GMT +3, время: 21:55.