Регулярное выражение для удаления чего-либо, кроме буквенно-цифровых и пробелов (в PHP)

Я пытаюсь удалить через регулярное выражение все, кроме буквенно-цифровых символов и пробелов.

Вот конверсия, которую я надеюсь достичь.

"I am a string" → "I am a string" "How are you?" → "How are you" "#53-Jeff" → "53-Jeff" 

Пока у меня это:

 return preg_replace("/[^0-9a-zA-Z]/","", $val); 

Но, будучи новичком в регулярном выражении, я не могу понять, как вставить пространство. У меня были странные результаты, когда я пытался.

Solutions Collecting From Web of "Регулярное выражение для удаления чего-либо, кроме буквенно-цифровых и пробелов (в PHP)"

Вставка пространства так же просто, как вы ожидаете:

 preg_replace("/[^0-9a-zA-Z ]/", "", $val); 

Btw. ваш третий пример мне не ясен: вы хотите заменить - тоже? Если нет, вам нужно добавить его также в список символов.

См. Это для примера.

Это должно работать:

 preg_replace("/[^0-9a-zA-Z -]/", "", $val); 

Имейте в виду, чтобы добавить «-» к самому концу блока набора символов, или его можно интерпретировать как оператор диапазона.

В зависимости от ваших флагов регулярного выражения (если разрешены пробелы / комментарии) вам может потребоваться заменить " " (прямо перед "-" ) с помощью "\s" или (более строгого) "\ " .