Регулярные выражения.

2People

Новичок
Регулярные выражения.

Привет, у меня мало опыта работы с рег.выражениями.
Пишу ф-цию для транслитирации.

PHP:
function transliter($name, $min=1, $max=150, $path_name=false){
		$rus=array("А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", 
"П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я", "а", "б", "в", "г", "д", "е", 
"ё","ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", 
"э", "ю", "я", "-", "_", " ");
		$lat=array("A", "B", "V", "G", "D", "E", "E","ZH", "Z", "I", "I", "K", "L", "M", "H", "O", 
"P", "R", "S", "T", "U", "F", "H", "C","CH","SH", "SCH", "", "Y", "", "E","YU","YA", "a", "b", "v", "g", "d", "e", 
"e","zh","z", "i", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c","ch","sh","sch", "", "y", "", 
"e", "yu", "ya", "_", "_", "_");
		$pattern="/^[a-zA-Z0-9_]\{$min,$max\}\$/";
		if(!preg_match($pattern,$path_name)){ //tckb с англ. буквами что-то не так, использую русские и транслирую их
			$name=preg_replace("/[^а-яА-Я _\-]/","",$name);
			$path_name=preg_replace($rus,$lat,$name);
		}
		$return=$path_name;
	}
transliter($name, $min=1, $max=150, $path_name);
$name - руские буквы, которые вводит пользователь
$path_name - буквы которые вводит пользователь, в результате они должны быть обязательно английскими и _

Выдаёт Warning: preg_replace(): Delimiter must not be alphanumeric or backslash in mainn.class.php on line 7

Я такой ошибки не встречал. Мне кажется, что я сделал правильно=>ошибку не могу найти :(

-~{}~ 06.06.06 22:10:

Разобрался! Вернее, вспомнил, что где-то видел :)
но не понял, почему так надо делать.

$rus=array("'А'", "'Б'", "'В'" ..... и т.д.
 

2People

Новичок
строка 7 - $path_name=preg_replace($rus,$lat,$name);

Но я уже разобрался, как написал внизу своего первого поста.
 

WP

^_^
Потому что должен быть ограничитель выражения. Убери ковычки из массива и сделай
$path_name=preg_replace('~'.$rus.'~',$lat,$name);
Но. preg_replace тут не нужен. [m]strtr[/m] хватит (быстрее работает).
 

2People

Новичок
Я в этой теме случайно нажал "жалоба", возможно даже на WP. Извиняюсь!

-~{}~ 06.06.06 22:30:

Автор оригинала: WP
$path_name=preg_replace('~'.$rus.'~','~'.$lat.'~',$name);
Так не работает. Оставляет русское слово без изменений.
С добавлением кавычек в массив - работает. Кавычки надо добавить только русские буквы, видимо из-за того, что преобразует массив в хз что, т.к. происходит конкатенация строки и массива.
 

WP

^_^
Это я прошу прощенья, мне очень плохо сейчас (температура, отравился видимо). Замени на [m]strtr[/m]. Конечно мой пример не будет работать, ведь у тебя массив, т.е. попадает ~Array~. Пойду хлебну водки.
 
Сверху