Intereting Posts
Как сделать POST массив с кодировкой multipart / form-data? код воспламенителя Модульные расширения – уровень доступа к MX_Router :: _ set_default_controller () должен быть общедоступным (как в классе CI_Router) Php, in_array, значение 0 Добавить запятые в качестве разделителя тысяч и точки с плавающей точкой в ​​php Не удается получить доступ к файлам php, скопированным в / var / www / или другие папки Страница перенаправления PHP на основе переменных GET PHP DOMDocument: как анализировать xml / rss теги с именами полей CUSTOM? Ошибка PHP / Apache в скрипте (ошибка сегментации (11) Как вернуть данные через Ajax с помощью Plupload при загрузке? Пример API Google Map API Как отправлять PHP Fatal Errors только? Отправьте <input type = "file" /> с помощью jQuery $ .post Отображать значение поплавка без научной нотации Получение домена, который вызывает PHP-файл на вашем сервере через AJAX включение корнов в codeigniter (restserver by @chriskacerguis)

Пунктуация полосы пропускания PHP

Предположим, у меня это:

$hello = "Hello, is StackOverflow a helpful website!? Yes!"; 

и я хочу снять пунктуацию так, чтобы она выводилась как:

 hello_is_stackoverflow_a_helpful_website_yes 

Как я могу это сделать?

 # to keep letters & numbers $s = preg_replace('/[^a-z0-9]+/i', '_', $s); # or... $s = preg_replace('/[^az\d]+/i', '_', $s); # to keep letters only $s = preg_replace('/[^az]+/i', '_', $s); # to keep letters, numbers & underscore $s = preg_replace('/[^\w]+/', '_', $s); # same as third example; suggested by @tchrist; ^\w = \W $s = preg_replace('/\W+/', '_', $s); 

для строки

 $s = "Hello, is StackOverflow a helpful website!? Yes!"; 

результат (для всех примеров)

Hello_is_StackOverflow_a_helpful_website_Yes_

Наслаждайтесь!

 function strip_punctuation($string) { $string = strtolower($string); $string = preg_replace("/[:punct:]+/", "", $string); $string = str_replace(" +", "_", $string); return $string; } 

Сначала строка преобразуется в нижний регистр, затем пунктуация удаляется, затем пробелы заменяются символом подчеркивания (это будет обрабатывать одно или несколько пробелов, поэтому, если кто-то помещает два пробела, он будет заменен только одним подчеркиванием).

Без регулярных выражений:

 <?php $hello = "Hello, is StackOverflow a helpful website!? Yes!"; // original string $unwantedChars = array(',', '!', '?'); // create array with unwanted chars $hello = str_replace($unwantedChars, '', $hello); // remove them $hello = strtolower($hello); // convert to lowercase $hello = str_replace(' ', '_', $hello); // replace spaces with underline echo $hello; // outputs: hello_is_stackoverflow_a_helpful_website_yes ?> 

Я бы пошел с чем-то вроде этого:

 $str = preg_replace('/[^\w\s]/', '', $str); 

Я не знаю, является ли это более широким, чем вы ищете, но это похоже на то, что вы пытаетесь сделать.

Я также замечаю, что вы заменили пробелы символами подчеркивания в своем примере. Код, который я бы использовал для этого:

 $str = preg_replace('/\s+/', '_', $str); 

Обратите внимание, что это также приведет к краху нескольких пробелов в один знак подчеркивания.