PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (30): В начало « ... 22 23 24 25 26 27 28 29 [30]
Найдено сообщений: 446
GoDr
Отправлено: 15 Января, 2015 - 13:29:09 • Тема: удалить подстроки • Форум: Регулярные выражения
Ответов: 5 Просмотров: 434
LIME пишет: А зачем слеш экранировать?
Слеш относится к специальным символам, которые нужно экранировать
Специальные символы: [ ] \ / ^ $ . | ? * + ( ) { }
GoDr
Отправлено: 15 Января, 2015 - 13:20:24 • Тема: Простой код что бы умножить два числа • Форум: Напишите за меня, пожалуйста
Ответов: 20 Просмотров: 133
LIME пишет: Ф-ция лучше
Можно обратно быстро вернуть
быстро на гульдены перейти
и не шариться больше по шаблонам
Ну это уже как фантазии хватит.. Можно и такое сделать... Сам класс
PHP:
скопировать код в буфер обмена
class LibPrice
{
private static
$valuta = array ( 'USD' => '1' ,
'EUR' => '1' ,
'JPY' => '1'
) ;
private static $_resource ;
public static function getNewPrice( $price , $valuta = 'USD' )
{
// получаем курсы валют
$class_name = __CLASS__ ;
self :: $_resource = new $class_name ;
$cbr = self :: $_resource ;
if ( $cbr -> load ( ) ) {
foreach ( self :: $valuta as $key => $value ) {
self :: $valuta [ $key ] = $cbr -> get ( $key ) ;
}
}
}
$price = $price / self :: $valuta [ $valuta ] ;
}
return $price ;
}
public function load( )
{
$xml = new DOMDocument( ) ;
$url = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req=' . date ( 'd.m.Y' ) ;
if ( @ $xml -> load ( $url ) ) {
$root = $xml -> documentElement ;
$items = $root -> getElementsByTagName ( 'Valute' ) ;
foreach ( $items as $item ) {
$code = $item -> getElementsByTagName ( 'CharCode' ) -> item ( 0) -> nodeValue ;
$curs = $item -> getElementsByTagName ( 'Value' ) -> item ( 0) -> nodeValue ;
}
return true ;
} else
return false ;
}
public function get( $cur )
{
return isset ( $this -> list [ $cur ] ) ?
$this -> list [ $cur ] : 0 ; }
}
Вызвать можно так (переводим 1555 рублей в доллары по сегодняшнему курсу)
PS
ничего комментировать не стал в коде, сделал на скорую руку.. Но прикольно получилось, сам не ожидал
GoDr
Отправлено: 15 Января, 2015 - 12:42:50 • Тема: LibDateTime() • Форум: Пользовательские функции
Ответов: 5 Просмотров: 3675
часто приходится использовать операции с датами, вот и написал для своих проектов небольшую библиотеку. Простая в обращении, самые необходимые методы. Конечно там только самое необходимое, но всегда можно расширить
Требование простое: PHP >= 5.2.0 (но лучше >=5.3)
Методы:
Возвращает дату в формате [12 декабря 2014 года]
Возвращает разницу дат
Прибавляет интервал к дате
Отнимает интервал от дате
Преобразует дату в нужный формат
Возвращает выпадающий список дней месяца
Возвращает выпадающий список месяцев
Возвращает выпадающий список годов
PHP:
скопировать код в буфер обмена
/**
* Класс для работы с Датой и Временем
* @package LibDateTime
* @version 1.1
* @author Gold Dragon <illusive@bk.ru>
* @link http://gd.lotos-cms.ru
* @copyright Авторские права (C) 2000-2015, Gold Dragon
* @date 01.01.2015
* @see http://wiki.lotos-cms.ru/index.php/LibDateTime
* @license MIT License: http://opensource.org/licenses/MIT
*/
class LibDateTime
{
/** @var array : название месяцев (именительный падеж) */
private static
$MONTH_NAME_I = array ( "---------" ,
"Январь" ,
"Февраль" ,
"Март" ,
"Апрель" ,
"Май" ,
"Июнь" ,
"Июль" ,
"Август" ,
"Сентябрь" ,
"Октябрь" ,
"Ноябрь" ,
"Декабрь" ) ;
/** @var array : название месяцев (родительный падеж) */
private static
$MONTH_NAME_R = array ( "---------" ,
"января" ,
"февраля" ,
"марта" ,
"апреля" ,
"мая" ,
"июня" ,
"июля" ,
"августа" ,
"сентября" ,
"октября" ,
"ноября" ,
"декабря" ) ;
/** @var array : суффикс для года */
private static
$SUFFIX = array ( "" , "г." , "года" ) ;
/**
* Возвращает дату в формате [12 декабря 2014 года]
*
* @param datetime|null $date : дата в любом форматие
* @param int $suffix : выводить ли слово после даты
* 0 - нет (по умолчанию)
* 1 - короткая форма
* 2 - длинная форма
*
* @return string : дата
*
* @example:
* echo LibDateTime::getDateName('01.01.2015');
* echo LibDateTime::getDateName('01.01.2015', 2);
*/
public static function getDateName( $date = null , $suffix = 0)
{
}
if ( $suffix < 0 or $suffix > 2) {
$suffix = 0 ;
}
$result [ ] = self :: formatDate ( $date , 'd' ) ;
$result [ ] = self :: $MONTH_NAME_R [ self :: formatDate ( $date , 'n' ) ] ;
$result [ ] = self :: formatDate ( $date , 'Y' ) ;
$result [ ] = self :: $SUFFIX [ $suffix ] ;
}
/**
* Возвращает разницу дат
*
* @param datetime $date1 : уменьшаемое
* @param datetime|null $date2 : вычитаемое (если не задана то текущая)
* @param string $format : возвращаемый формат (каждому символу должен предшествовать знак процента [%])
* Y : Годы, число, минимум две цифры с ведущими нулями
* y : Годы, число
* M : Месяцы, число, минимум две цифры с ведущими нулями
* m : Месяцы, число
* D : Дни, число, минимум две цифры с ведущими нулями
* d : Дни, число
* a : Общее количество дней в качестве результата выполнения DateTime::diff(), либо unknown
* H : Часы, число, минимум две цифры с ведущими нулями
* h : Часы, число
* I : Минуты, число, минимум две цифры с ведущими нулями
* i : Минуты, число
* S : Секунды, число, минимум две цифры с ведущими нулями
* s : Секунды, число
* R : Знак "-" при отрицательном числе, "+" при положительном
* r : Знак "-" при отрицательном числе, пусто при положительном
*
* @return int : разность (в днях)
*
* @example:
* echo LibDateTime::getDateDiff('01.01.2015');
* echo LibDateTime::getDateDiff('11.11.2020', '01.01.2015');
* echo LibDateTime::getDateDiff('11.11.2020', '01.01.2015', '%r%a');
*
* @since 21.08.2015 Gold Dragon
*/
public static function getDateDiff( $date1 , $date2 = null , $format = '%r%a' )
{
}
$d2 = new DateTime( $date1 ) ;
$d1 = new DateTime( $date2 ) ;
$result = ( int) $d1 -> diff ( $d2 ) -> format ( $format ) ;
return $result ;
}
/**
* Прибавляет интервал к дате
*
* @param string $date - дата
* @param string $interval - интервал в формате ISO 8601, например, P5D (5 дней) или P3Y (3 года)
* Y - Количество лет
* M - Количество месяцев
* D - Количество дней
* @param string $format - возвращаемый формат (по умолчанию d.m.Y)
*
* @return string - дата в формате $format
*
* @example:
* echo LibDateTime::getDateAdd('01.01.2015', 'P5D');
* echo LibDateTime::getDateAdd('01.01.2015', 'P5D', 'Y-m-d');
*/
public static function getDateAdd( $date , $interval , $format = 'd.m.Y' )
{
$d1 = new DateTime( $date ) ;
$result = $d1 -> add ( new DateInterval( $interval ) ) -> format ( $format ) ;
return $result ;
}
/**
* Отнимает интервал от дате
*
* @param string $date - дата
* @param string $interval - интервал в формате ISO 8601, например, P5D (5 дней) или P3Y (3 года)
* Y - Количество лет
* M - Количество месяцев
* D - Количество дней
* @param string $format - возвращаемый формат (по умолчанию d.m.Y)
*
* @return string - дата в формате $format
*
* @example:
* echo LibDateTime::getDateSub('01.01.2015', 'P5D');
* echo LibDateTime::getDateSub('01.01.2015', 'P5D', 'Y-m-d');
*/
public static function getDateSub( $date , $interval , $format = 'd.m.Y' )
{
$d1 = new DateTime( $date ) ;
$result = $d1 -> sub ( new DateInterval( $interval ) ) -> format ( $format ) ;
return $result ;
}
/**
* Преобразует дату в нужный формат
*
* @param string $date - дата (если не задана то текущая)
* @param string $format - возвращаемый формат (по умолчанию d.m.Y)
*
* @return string
*
* @example:
* echo LibDateTime::formatDate();
* echo LibDateTime::formatDate('', 'Y-m-d');
* echo LibDateTime::formatDate('01.01.2015', 'Y-m-d');
*/
public static function formatDate( $date = null , $format = 'd.m.Y' )
{
}
$date_obj = new DateTime( $date ) ;
return $date_obj -> format ( $format ) ;
}
/**
* Возвращает выпадающий список дней месяца
*
* @param int $month : номер месяца
* @param int $year : год
* @param string $tag_name : имя тега
* @param null|int $selected : значение для выбора
* @param string $tag_attribs : дополнительные атрибуты тега
* @param int $calendar : Календарь, используемый для вычисления
* 0 or CAL_GREGORIAN - Грегорианский календарь (по умолчанию)
* 1 or CAL_JULIAN - Юлианский календарь
* 2 or CAL_JEWISH - Еврейский календарь
* 3 or CAL_FRENCH - Календарь со дня Французской революции
*
* @return string : HTML-код
*
* @example:
* echo LibDateTime::selectDays(2, 2015, 'qqq');
* echo LibDateTime::selectDays(2, 2015, 'qqq', 12);
* echo LibDateTime::selectDays(2, 2015, 'qqq', '', ' id="qq1" style="color:#900"');
*/
public static function selectDays( $month , $year , $tag_name , $selected = null , $tag_attribs = '' , $calendar = CAL_GREGORIAN)
{
$result = '' ;
$result .= '<select name="' . $tag_name . ' ' . $tag_attribs . '">' ;
for ( $i = 1 ; $i <= $_day ; $i ++ ) {
$extra = ( $i == $selected ) ? ' selected="selected"' : '' ;
$result .= '<option value="' . $i . '" ' . $extra . '>' . $i . '</option>' ;
}
$result .= '</select>' ;
return $result ;
}
/**
* Возвращает выпадающий список месяцев
*
* @param string $tag_name : имя тега
* @param null|int $selected : значение для выбора
* @param string $tag_attribs : дополнительные атрибуты тега
* @param bool $padez : падеж
* true : именительны (по умолчанию)
* false : родительный
*
* @return string : HTML-код
*
* @example:
* echo LibDateTime::selectMonth('qqq');
* echo LibDateTime::selectMonth('qqq', 5);
* echo LibDateTime::selectMonth('qqq', '', ' id="qq1" style="color:#900"', false);
*/
public static function selectMonth( $tag_name , $selected = null , $tag_attribs = '' , $padez = true )
{
$result = '' ;
$month = ( $padez ) ? self :: $MONTH_NAME_I : self :: $MONTH_NAME_R ;
$result .= '<select name="' . $tag_name . ' ' . $tag_attribs . '">' ;
for ( $i = 1 ; $i < 13 ; $i ++ ) {
$extra = ( $i == $selected ) ? ' selected="selected"' : '' ;
$result .= '<option value="' . $i . '" ' . $extra . '>' . $month [ $i ] . '</option>' ;
}
$result .= '</select>' ;
return $result ;
}
/**
* Возвращает выпадающий список годов
*
* @param int $year1 : начальный год
* @param string $tag_name : имя тега
* @param null|int $selected : значение для выбора
* @param string $tag_attribs : дополнительные атрибуты тега
* @param null|int $year2 : конечный год (если не задан, то текущий)
*
* @return string : HTML-код
*
* @example:
* echo LibDateTime::selectYear(2000, 'qqq');
* echo LibDateTime::selectYear(2000, 'qqq', 2013);
* echo LibDateTime::selectYear(2000, 'qqq', '', ' id="qq1" style="color:#900"', 2020);
*/
public static function selectYear( $year1 , $tag_name , $selected = null , $tag_attribs = '' , $year2 = null )
{
$result = '' ;
}
$result .= '<select name="' . $tag_name . ' ' . $tag_attribs . '">' ;
for ( $i = $year1 ; $i <= $year2 ; $i ++ ) {
$extra = ( $i == $selected ) ? ' selected="selected"' : '' ;
$result .= '<option value="' . $i . '" ' . $extra . '>' . $i . '</option>' ;
}
$result .= '</select>' ;
return $result ;
}
}
Код полностью документирован и с примерами. Если понравится, то буду только рад вам облегчить жизнь в написание своих проектов.
Если будут вопросы или предложения, буду только рад услышать.
GoDr
Отправлено: 15 Января, 2015 - 11:00:37 • Тема: удалить подстроки • Форум: Регулярные выражения
Ответов: 5 Просмотров: 434
Цитата: Как сделать так, чтобы пропали только цитаты, а обычный текст остался?
Что-то как-то сложно.. Если просто нужно удалить цитаты из текста, то не проще так?
PHP:
скопировать код в буфер обмена
$a = '#<quote(.*?)>.*?<\/quote>#is' ;
$b = 'test test бла бла
<quote="test" param1="123"> текст </quote>
тест текст
<quote="test" param1="123"> текст </quote>' ;
echo $c ;
А твой код вообще-то не удаляет цитаты.
GoDr
Отправлено: 15 Января, 2015 - 10:25:40 • Тема: Простой код что бы умножить два числа • Форум: Напишите за меня, пожалуйста
Ответов: 20 Просмотров: 133
madest , данные от куда берёшь? Из html-страницы? Если ДА, всё "ручками" или через javascript.
А если Данные хранятся в базе данных и страницы формируются на сервере средствами PHP, то всё очень просто.
как вариант:
1. Создай файл, к примеру valuta.php
закинь туда код типа
2. Подключи этот файлик к своему проекту
3. Ну и дальше, где у тебя непосредственно выводится цена, добавь что-то по типу
Поменялся курс, залезай в valuta.php и правь.
А ещё лучше сразу забирать курс валюты с какого-нибудь сайта, например, с того Центрабанка (http://www.cbr.ru/scripts/Root.asp?PrtId=SXML).
GoDr
Отправлено: 15 Января, 2015 - 10:03:57 • Тема: Как получить данные с саита? • Форум: Напишите за меня, пожалуйста
Ответов: 13 Просмотров: 144
Zuldek , Не всё так просто.. Данные формируются через Javascript. И ещё просмотр результатов осуществляется через Ajax. Так что просто скопировав страницу, ничего не получишь.
А запрашивать в своём скрипте (не через клиента) сторонний скрипт... не думаю что должно получится. По крайней мере нормальный код такое бы запретил..
GoDr
Отправлено: 14 Января, 2015 - 21:44:53 • Тема: Регулярные выражения • Форум: Напишите за меня, пожалуйста
Ответов: 13 Просмотров: 101
И задание 2......
Имея полное имя файла (например, picture.jpg), получите его расширение (например, jpg)
Имея полное имя файла, проверьте соответствует ли оно: а) архиву, б) аудиофайлу, в) видеофайлу, г) картинке
PHP:
скопировать код в буфер обмена
$a = "picture.jpg" ;
$b [ 0
] = array ( 'zip' , 'rar' , 'arj' ) ; $b [ 1
] = array ( 'mp3' , 'wma' , 'wav' ) ; $b [ 2
] = array ( 'mkv' , 'mp4' , 'avi' ) ; $b [ 3
] = array ( 'jpg' , 'png' , 'gif' ) ;
$c = array ( 'Архив' , 'Музыка' , 'Фильм' , 'Картинка' ) ;
foreach ( $b as $key => $value ) {
echo 'Это ' . $c [ $key ] ;
break ;
}
}
В произвольном HTML-коде найдите строку, заключенную в теги <title></title>
PHP:
скопировать код в буфер обмена
$a = <<<EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Форумы портала PHP.SU :: Регулярные выражения</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Cache-Control" content="private">
<meta name="description" content="Форумы портала PHP.SU, форум php-программистов">
<meta http-equiv="description" content="Форумы портала PHP.SU, Форум PHP программистов">
<meta name="Keywords" content="PHP, MySQL, JavaScript, форум, мануал, справочник, статьи, примеры">
<meta http-equiv="Keywords" content="PHP, MySQL, JavaScript, форум, мануал, справочник, статьи, примеры">
EOF ;
echo $tmp [ 1] ;
В произвольном HTML-коде найдите все ссылки в тегах <a> (атрибут href)
PHP:
скопировать код в буфер обмена
$a = '<a href="link1.html">link1</a>asdas<a href="link2.html">link2</a>asdas<a href="link3.html">link3</a>asdas<a href="link4.html">link4</a>asdas' ;
preg_match_all ( "#<a[^>]+href=(\" |\')([^ >]+)[^>]*(\" |\')>.*?</a>#i" , $a , $tmp ) ;
В произвольном HTML-коде найдите все ссылки на картинки в тегах <img> (атрибут src)
В произвольном тексте найдите и подсветите с помощью тега <strong> заданную строку
В произвольном тексте найдите определенный набор текстовых смайликов Улыбка, Подмигивание, Недовольство, огорчение на соответствующие им картинки <img src="smile.png" alt="Улыбка">, <img src="wink.png" alt="Подмигивание">, <img src="sad.png" alt="Недовольство, огорчение">
PHP:
скопировать код в буфер обмена
$a = 'строка :) строка ;) строка :( строка строка строка строка ' ;
$b [ ] = array ( 'smile' => ':)' , 'img' => '<img src="smile.png" alt="Улыбка">' ) ; $b [ ] = array ( 'smile' => ';)' , 'img' => '<img src="wink.png" alt="Подмигивание">' ) ; $b [ ] = array ( 'smile' => ':(' , 'img' => '<img src="sad.png" alt="Недовольство, огорчение">' ) ;
foreach ( $b as $value ) {
$a = preg_replace ( "#\Q" . $value [ 'smile' ] . "\E#" , $value [ 'img' ] , $a ) ; }
echo $a ;
В заданной строке избавьтесь от случайных повторяющихся пробелов.
(Добавление)
Ну где-то как-то так
может где и опечатывался.. но вроде всё проверял... Хотя вариантов решения может быть сколько угодно
(Добавление)
Цитата: А \w не покрывает часть допустимых символов, +, например.
Так я написал, самая простая В данном случае задача не конкретизирована, в примере указано вообще на латинице ;)
Цитата: В символьной маске символ | не имеет специального значения.
Малость тормознул
(Добавление)
Вот второе задание уже ближе к реальности.. Хорошая тренировка на рациональные решения
GoDr
Отправлено: 14 Января, 2015 - 20:43:59 • Тема: Регулярные выражения • Форум: Напишите за меня, пожалуйста
Ответов: 13 Просмотров: 101
Целое число
СМ. is_numeric()
Набор из букв и цифр (латиница)
Набор из букв и цифр (латиница + кириллица)
Домен (google.com)
Проще использовать простое сравнение
Имя пользователя (с ограничением 3-25 символов, которыми могут быть буквы и цифры, первый символ обязательно буква)
Пароль (строчные и прописные латинские буквы, цифры)
Пароль (строчные и прописные латинские буквы, цифры, спецсимволы, минимальная длина - 8 символов)
Дата в формате YYYY-MM-DD
Регуляркой не получится просерить корректность даты. СМ.checkdate()
можно чуть усложнить
ну или как то так
Дата в формате DD/MM/YYYY
Дата в формате DD.MM.YYYY
Время в формате HH:MM:SS
Время тоже не получится проверить на корректность.. Можно конечно, но регулярка будет супер длинной
Время в формате HH:MM
URL (http://yandex.ru/)
E-mail (user@maildomain.com)
Вообще-то email в соответсвии со спецификацией может содержать практически любые символы, даже несколько "собак". Но если совсем просто, то можно так
IPv4 (94.137.192.81)
IPv6 (2001:0:9d38:6abd:c70:2d3c:a176:3398)
Не вникал в этот формат ещё, так что классическое выражение
CODE (
htmlphp ):
скопировать код в буфер обмена
#^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$#
Mac-адрес (ec:23:3d:1b:7a:e7)
Российский номер мобильного телефона (+79021234567)
Номер кредитной карты (4048 4323 9889 3301)
ИНН (3808753981 или 380870115601)
Почтовый индекс (664000)
Цена в рублях (2546,10 руб.)
Цена в долларах ($39.99)
(Добавление)
Хорошая тренировка для мозгов... Правда слишком простые задания в первом задании Хотя бред сивой кобылы!!!!!! Не понимаю преподавателей которые задают изначально нерациональные (а порой даже глупые) решения
Страниц (30): В начало « ... 22 23 24 25 26 27 28 29 [30]
Powered by ExBB FM 1.0 RC1. InvisionExBB