Это, вероятно, одна из тех задач, о которой все думают, что знают решение, но многие решают её в итоге некорректно. Наткнувшись на ещё один сверхслабый кусок кода, написанный для этой цели, я задумала разъясняющую блогозапись.
Суть проблемы
Вы хотите убрать символ решётки (#) из значения location.hash. Например, когда hash равен "#foo", Вы хотите получить строку, содержащую "foo". Это же просто, правда?
Сложные случаи
Вот что большинство разработчиков, кажется, упускает из виду: в современных, мощно наджаваскриптованных, приложениях переменная hash может содержать любые юникодовые символы. Она не обязательно должна соответствовать значению реального атрибута id с той же страницы. А когда она и соответствует, атрибуты id теперь могут содержать почти любые юникодовые символы. Да ещё часто забывают, что на странице может и не быть никакого хэша. Даже если URL оканчивается символом «#», строка location.hash равняется на самом деле "" (пустой строке), а не "#".
Наивные подходы
Вот наиболее недавний — я нашла его в книге, на которую составляла техническую рецензию:
Автор фотографії: Gustty Постійні читачі “Української блогосфери”, безперечно, знають, що останнім часом я багато уваги присвячую ігровій сфері, а конкретно – практикуюся в розробці ігор і займаюся підтримкою власного ігрового порталу. Так ось, окрім, власне, практики, я читаю чимало теоретичної літератури, яка пояснює деякі геймплейні моменти. Зокрема, наразі мене найбільше цікавлять аспекти створення адиктивності (від [...]
Пояс по версии WBA стал вакантным после того, как его завоевал украинец Владимир Кличко. По правилам организации, чемпиону, владеющему титулами по другим версиям (а у Кличко их стало три), присваивается звание «Суперчемпиона», а «регулярный» пояс объявляется вакантным и его оспаривают первый и второй номер рейтинг-листа. На тот момент первую строчку занимал Чагаев, вторую - Поветкин.
Первые несколько раундов прошли в равной борьбе, затем стало сказываться небольшое преимущество Поветкина, который был активнее соперника.
В пятом раунде Поветкин подустал и стал отдавать инициативу, в Sportbox.ru Александру Павлову назвал причины своего поражения от нового чемпиона WBA в супертяжелом весе россиянина Александра Поветкина.
- Поветкин избрал правильную тактику и отработал на все сто процентов. Я же не доработал, — цитирует Чагаева издание. — Да, в шестом раунде Поветкин пропустил удар, но он собрался и хорошо защищался. Скорее всего, это была моя ошибка. Это жизнь, спорт, а в жизни, как и в спорте, ты выигрываешь и проигрываешь. Не всегда получается так, как хочешь. Но не следует опускать руки, нужно продолжать работать. Надеюсь, что в будущем начнется в жизни белая полоса. Нужно проводить больше боев, и надеюсь, что промоутер их будет организовывать. Требуется больше боевой практики, чтобы не было простоя. Длительные простои, как это было сейчас, нежелательны.
2011-08-28 15:38:36
... упрощены при помощи регулярных выражений. Но сами ... регулярные выражения для большинства ...
+ развернуть текстсохранённая копия
Достаточно часто приходится решать на первый взгляд непростые задачи в программировании, которые могут быть очень упрощены при помощи регулярных выражений. Но сами регулярные выражения для большинства даже достаточно опытных разработчиков не всегда настолько прозрачны и просты, как хотелось бы. Иногда доводилось ловить себя на том, что, когда в голову приходит идея использовать в каком-либо контексте [...]
Источник: Zend.In.Ua - Блог о программировании на PHP