|
|
|
| Здравствуйте!
Покажите пожалуйста какой-нибудь пример регулярки с проверкой улицы. Т.е. улица скажем такая: ул. Петровско-Разумовская, д.1/1, стр.1 получается нужно разрешить русские буквы обоих регистров, точки, запятые, пробелы, тире, слеш, остальное запретить.
Скажу честно сам составить даже не пробовал, т.к. с регулярками к сожалению не дружу.. | |
|
|
|
|
|
|
|
для: 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) | |
|
|
|
|
|
|
|
для: Deed
(09.04.2013 в 18:44)
| | Благодарю! | |
|
|
|
|
|
|
|
для: MihailGT
(09.04.2013 в 19:41)
| | [^а-яё\.\/,0-9 -] - возможное тире забыли. | |
|
|
|
|
|
|
|
для: Deed
(09.04.2013 в 19:53)
| | [^а-яё\.\/,\d\s-] | |
|
|
|
|
|
|
|
для: confirm
(09.04.2013 в 20:55)
| | Но он может скопировать название улицы из другого html, например. И будет там в конце конец (пху, тавтология...) строки. И вставит от скопированное в WYSIWIG и получит перенос строки из-за \s...
Я, просто, о том, что в данном случае "физический" пробел в регулярке, м-м-м, более надежен.
Как-то так. | |
|
|
|
|
|
|
|
для: Deed
(10.04.2013 в 07:13)
| | >и получит перенос строки из-за \s
Кто вам такое сказал, и чем это он надежен? \s - это пробельный символ, писать " " можно еще, например, в replace(' ', '/'), читаемо, но в диапазоне... и восприятие не очень, и ляп допустить раз плюнуть. | |
|
|
|
|
|
|
|
для: 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 уберите пробелы. | |
|
|
|
|
|
|
|
для: Deed
(10.04.2013 в 08:21)
| | Вообще-то "рубит", это как то что и нужно автору, так как \r\n, для строки адреса уж точно ему не нужно, так ведь?
Если же мне нужна "строгость", то я бы написал как \x20. А вот сделать триминг, то никак бы не стал писать "\b ", а именно "\b\s". | |
|
|
|
|
|
|
|
для: confirm
(10.04.2013 в 08:50)
| | Автору, насколько я понял, нужна проверка на допустимые символы. И "физический" пробел в регулярке делает это строже, чем литерал \s, который может пропустить и перенос строк.
И, конечно же, Вы абсолютно правы - escape-представление символа пробела \x20 гораздо нагляднее. | |
|
|
|
|
|
|
|
для: Deed
(10.04.2013 в 12:40)
| | >И "физический" пробел в регулярке делает это строже, чем литерал \s, который может пропустить и перенос строк.
Ну да, а примеры кто приводил, вы сами то хоть смотрели их результат?
\xNN - это шестнадцатеричное значение, а не escape | |
|
|
|
|
|
|
|
для: confirm
(10.04.2013 в 12:50)
| | Что не так??
Регулярка с \s даст на выходе непрерывную строку:
*realtimeresults:showsresultsasyoutype*codehinting:rolloveryourexpressiontoseeinfoonsp ecificelements*detailedresults:rolloveramatchtoseedetails&viewgroupinfobelow
|
С "физическим" пробелом - удалит лишь собственно пробелы:
*realtimeresults:showsresultsasyoutype
*codehinting:rolloveryourexpressiontoseeinfoonsp ecificelements
*detailedresults:rolloveramatchtoseedetails&viewgroupinfobelow
|
То есть, возвращаясь к заданному вопросу, \s в регулярке может пропустить перенос строк. Это все, что я хочу объяснить. | |
|
|
|
|
|
|
|
для: Deed
(10.04.2013 в 13:00)
| | Наоборот - не пропустит в данном случае. | |
|
|
|
|
|
|
|
для: confirm
(10.04.2013 в 13:33)
| |
<?
<?php
$str="ул. Петровско-Разумовская, д.1/1, стр.1";
if(preg_match("/[^а-яё\.\/,0-9 ]/i",$str)){
echo "Мы нашли запрещенный символ!";
}
else{
echo "Строка соответствует нашему условию.";
}
?>
|
Если в $str БУДЕТ НЕНУЖНЫЙ перенос строки, регулярка БЕЗ \s даст это знать. А с \s - ПРОПУСТИТ. | |
|
|
|
|
|
|
|
для: Deed
(10.04.2013 в 13:45)
| | Ясно - приводим пример, в котором вырежет, а говорим о другом, где нет. Не удивительно, что крышу сносит ) | |
|
|
|
|
|
|
|
для: confirm
(10.04.2013 в 13:33)
| | И, конечно же, такая: /[^а-яё\.\/,\d\x20]/i - лучше. Читабельнее... | |
|
|
|
|
|
|
|
для: Deed
(10.04.2013 в 13:47)
| | Не лучше, а по потребности, а вот в сложных выражениях, это да - пустоту можно и не заметить, или снести случайно. | |
|
|
|