Скажем, у меня есть это:
$hello = "Hello, is StackOverflow a helpful website!? Yes!";
и я хочу вычеркнуть пунктуацию, чтобы она выводилась как:
hello_is_stackoverflow_a_helpful_website_yes
Как я могу это сделать?
Скажем, у меня есть это:
$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('/[^a-z\d]+/i', '_', $s);
# to keep letters only
$s = preg_replace('/[^a-z]+/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);
Обратите внимание, что это также приведет к краху нескольких пробелов в одно подчеркивание.