- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть произвольная строка. Нужно извлечь из нее число. Делаю так:
Это для того, чтобы убрать все, не относящееся к числам.
Заэкранировал -,. на всякий случай. С регулярками у меня все плохо :(
Так вот, если строка:
то на выходе получаю -3.
то на выходе получаю --3.
Откуда берется этот дополнительный минус блин? (кодировка utf-8)
---------- Добавлено 19.11.2013 в 05:20 ----------
Что странно, strpos($str,'-') возвращает true, хотя минуса в строке и в помине нет.
Разобрался. Вот как всегда все самое простой еле находится. В строке действительно был минус, везде...
Несколько комментариев:
В регулярках, в наборе символов (набор символов это то что заключается в квадратные кавычки []), не нужно экранировать символы которые являются частью языка регулярных выражений, т.е. в данном случае достаточно былобы так:
а в вашем примере у вас еще и знак обратного слеша найдется если он будет вплотную к цифрам стоять.
Также верхний апостров в наборе символов является отрицанием, т.е. найдется то чего нет среди перечисленного набора (апостров в не набора это начало строки), а вам нужно наоборот найти число, т.е. апостров не нужен для того чтобы найти число в строке
и также чтобы регулярки корректно работали с utf-8 строками, необходимо добавлять модификатор u (не путать с большой U) http://us3.php.net/manual/en/reference.pcre.pattern.modifiers.php
т.е. должно быть так:
а вообще правильная регулярка для поиска чисел (целых, дробных с разделителем запятая или точка, или отрицательных) это (используем функцию preg_match для поиска):
правда если число имеет какое либо форматирование (например французкое 1 000 000), то оно не найдется или найдется не полностью, но в условии вашей задачи про это ничего не было сказано
И еще:
(кодировка utf-8)
strpos($str,'-')
Если у вас кодировка UTF-8 то нужно использовать мультибайтовые функции для работы со строками (например mb_strpos), т.к. стандартные функции типа strpos не рассчитаны на работу с мультибайтовыми кодировками, и у вас обязательно будут глюки с этим
Rulin, спасибо за советы, учту.
насчет отрицания, то там как раз эффект, когда
найдется, ты мы как раз убираем все из строки, кроме этого.
в моем случае подразумевается, что в строке всего 1 число.
мультибайтовые функции для работы со строками (например mb_strpos)
обычно так и делаю, и проверил и так и эдак, а тут отписал не mb_, а просто strpos.
модификатор u
точно, про это вообще всегда забываю, спасибо :)