Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Регулярка улицы
 
 автор: MihailGT   (09.04.2013 в 17:23)   письмо автору
 
 

Здравствуйте!
Покажите пожалуйста какой-нибудь пример регулярки с проверкой улицы. Т.е. улица скажем такая: ул. Петровско-Разумовская, д.1/1, стр.1 получается нужно разрешить русские буквы обоих регистров, точки, запятые, пробелы, тире, слеш, остальное запретить.
Скажу честно сам составить даже не пробовал, т.к. с регулярками к сожалению не дружу..

  Ответить  
 
 автор: Deed   (09.04.2013 в 18:44)   письмо автору
 
   для: MihailGT   (09.04.2013 в 17:23)
 


<?php
$str
="ул. Петровско-Разумовская, д.1/1, стр.1";
if(
preg_match("/[^а-яё\.\/,0-9 ]+/i",$str)){
echo 
"Мы нашли запрещенный символ!";
}
else{
echo 
"Строка соответствует нашему условию.";
}

?>

Если сайт в utf-8, ставим перед i (игнорировать регистр символов) модификатор u, который сообщает движку, что кодировка символов в utf:
preg_match("/[^а-яё\.\/,0-9 ]+/ui",$str)

  Ответить  
 
 автор: MihailGT   (09.04.2013 в 19:41)   письмо автору
 
   для: Deed   (09.04.2013 в 18:44)
 

Благодарю!

  Ответить  
 
 автор: Deed   (09.04.2013 в 19:53)   письмо автору
 
   для: MihailGT   (09.04.2013 в 19:41)
 

[^а-яё\.\/,0-9 -] - возможное тире забыли.

  Ответить  
 
 автор: confirm   (09.04.2013 в 20:55)   письмо автору
 
   для: Deed   (09.04.2013 в 19:53)
 

[^а-яё\.\/,\d\s-]

  Ответить  
 
 автор: Deed   (10.04.2013 в 07:13)   письмо автору
 
   для: confirm   (09.04.2013 в 20:55)
 

Но он может скопировать название улицы из другого html, например. И будет там в конце конец (пху, тавтология...) строки. И вставит от скопированное в WYSIWIG и получит перенос строки из-за \s...
Я, просто, о том, что в данном случае "физический" пробел в регулярке, м-м-м, более надежен.
Как-то так.

  Ответить  
 
 автор: confirm   (10.04.2013 в 07:32)   письмо автору
 
   для: Deed   (10.04.2013 в 07:13)
 

>и получит перенос строки из-за \s

Кто вам такое сказал, и чем это он надежен? \s - это пробельный символ, писать " " можно еще, например, в replace(' ', '/'), читаемо, но в диапазоне... и восприятие не очень, и ляп допустить раз плюнуть.

  Ответить  
 
 автор: Deed   (10.04.2013 в 08:21)   письмо автору
 
   для: confirm   (10.04.2013 в 07:32)
 


<?php
$str
="* real time results: shows results as you type 
* code hinting: roll over your expression to see info on specific elements 
* detailed results: roll over a match to see details & view group info below "
;
$new=preg_replace("/\s/","",$str);
echo 
$new;
?>

[url]http://sandbox.onlinephpfunctions.com/code/e5d05f65b8d0fb2b0c258523ff1bb615932 87d2c[/url]

В то время, как:

<?php
$str
="* real time results: shows results as you type 
* code hinting: roll over your expression to see info on specific elements 
* detailed results: roll over a match to see details & view group info below "
;
$new=preg_replace("/ /","",$str);
echo 
$new;
?>

[url]http://sandbox.onlinephpfunctions.com/code/0a30ab3901433873e76832d7a1fd28a456f fc8d6[/url]

Как видим, первая регулярка "рубит" и пробелы, и переносы строк, в то время как вторая переносы строк не трогает.
При всем уважении.
P.S. В url уберите пробелы.

  Ответить  
 
 автор: confirm   (10.04.2013 в 08:50)   письмо автору
 
   для: Deed   (10.04.2013 в 08:21)
 

Вообще-то "рубит", это как то что и нужно автору, так как \r\n, для строки адреса уж точно ему не нужно, так ведь?
Если же мне нужна "строгость", то я бы написал как \x20. А вот сделать триминг, то никак бы не стал писать "\b ", а именно "\b\s".

  Ответить  
 
 автор: Deed   (10.04.2013 в 12:40)   письмо автору
 
   для: confirm   (10.04.2013 в 08:50)
 

Автору, насколько я понял, нужна проверка на допустимые символы. И "физический" пробел в регулярке делает это строже, чем литерал \s, который может пропустить и перенос строк.
И, конечно же, Вы абсолютно правы - escape-представление символа пробела \x20 гораздо нагляднее.

  Ответить  
 
 автор: confirm   (10.04.2013 в 12:50)   письмо автору
 
   для: Deed   (10.04.2013 в 12:40)
 

>И "физический" пробел в регулярке делает это строже, чем литерал \s, который может пропустить и перенос строк.

Ну да, а примеры кто приводил, вы сами то хоть смотрели их результат?

\xNN - это шестнадцатеричное значение, а не escape

  Ответить  
 
 автор: Deed   (10.04.2013 в 13:00)   письмо автору
 
   для: confirm   (10.04.2013 в 12:50)
 

Что не так??
Регулярка с \s даст на выходе непрерывную строку:

*realtimeresults:showsresultsasyoutype*codehinting:rolloveryourexpressiontoseeinfoonsp ecificelements*detailedresults:rolloveramatchtoseedetails&viewgroupinfobelow


С "физическим" пробелом - удалит лишь собственно пробелы:

*realtimeresults:showsresultsasyoutype
*codehinting:rolloveryourexpressiontoseeinfoonsp ecificelements
*detailedresults:rolloveramatchtoseedetails&viewgroupinfobelow


То есть, возвращаясь к заданному вопросу, \s в регулярке может пропустить перенос строк. Это все, что я хочу объяснить.

  Ответить  
 
 автор: confirm   (10.04.2013 в 13:33)   письмо автору
 
   для: Deed   (10.04.2013 в 13:00)
 

Наоборот - не пропустит в данном случае.

  Ответить  
 
 автор: Deed   (10.04.2013 в 13:45)   письмо автору
 
   для: confirm   (10.04.2013 в 13:33)
 


<?
<?php
$str
="ул. Петровско-Разумовская, д.1/1, стр.1";
if(
preg_match("/[^а-яё\.\/,0-9 ]/i",$str)){
echo 
"Мы нашли запрещенный символ!";
}
else{
echo 
"Строка соответствует нашему условию.";
}

?>

Если в $str БУДЕТ НЕНУЖНЫЙ перенос строки, регулярка БЕЗ \s даст это знать. А с \s - ПРОПУСТИТ.

  Ответить  
 
 автор: confirm   (10.04.2013 в 13:50)   письмо автору
 
   для: Deed   (10.04.2013 в 13:45)
 

Ясно - приводим пример, в котором вырежет, а говорим о другом, где нет. Не удивительно, что крышу сносит )

  Ответить  
 
 автор: Deed   (10.04.2013 в 13:47)   письмо автору
 
   для: confirm   (10.04.2013 в 13:33)
 

И, конечно же, такая: /[^а-яё\.\/,\d\x20]/i - лучше. Читабельнее...

  Ответить  
 
 автор: confirm   (10.04.2013 в 13:52)   письмо автору
 
   для: Deed   (10.04.2013 в 13:47)
 

Не лучше, а по потребности, а вот в сложных выражениях, это да - пустоту можно и не заметить, или снести случайно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования