Регулярное выражение, которое проверяет символы верхнего или нижнего регистра с или без акцентов - PullRequest
1 голос
/ 17 июля 2010

Как я могу заставить следующее регулярное выражение игнорировать все пробелы?

$foo = ereg_replace("[^áéíóúÁÉÍÓÚñÑa-zA-Z]", "", $_REQUEST["bar"]);

Ввод: Ingeniería Eléctrica '*; <42 </p>

Токовый выход: IngenieríaEléctrica

Желаемый результат: Ingeniería Eléctrica

Я попытался добавить / s \ s \ s * \ s + / \ s + / / s / t / r среди других, и все они потерпели неудачу.

Цель: Регулярное выражение, которое будет принимать только строки с символами верхнего или нижнего регистра с или без (испанского) акцентов.

Спасибо!

Ответы [ 4 ]

3 голосов
/ 17 июля 2010

Я не вижу причин, почему добавление \s к этому регулярному выражению не сработало бы.\s должно соответствовать всем пробельным символам.

$foo = preg_replace("/[^áéíóúÁÉÍÓÚñÑa-zA-Z\s]/", "", $_REQUEST["bar"]);
0 голосов
/ 17 июля 2010

Все ответы до сих пор не указывают на то, что ваш метод сопоставления акцентированных символов является хаком и он неполон - например, нет совпадений с серьезными акцентами.

Лучший способ - использовать mbstringрасширение:

mb_regex_encoding("UTF-8"); //or whatever encoding you're using
var_dump(mb_ereg_replace("[^\\w\\s]|[0-9]", "", "Ingeniería Eléctrica'*;<42", "z"));

дает

string(22) "Ingeniería Eléctrica"
0 голосов
/ 17 июля 2010

ereg_replace использует Расширенные регулярные выражения POSIX и там используются скобочные выражения POSIX .

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

Но вы можете использовать класс символов POSIX [:space:] внутри выражения в скобках POSIX для достижениятот же эффект:

$foo = ereg_replace("[^áéíóúÁÉÍÓÚñÑa-zA-Z[:space:]]", "", $_REQUEST["bar"]);

Видите ли, он отличается от, я думаю, более известного синтаксиса Perl, и поскольку функции регулярных выражений POSIX устарели в PHP 5.3, вы действительно должны использовать Perlсовместимые.

0 голосов
/ 17 июля 2010

Я считаю, что это должно работать

$foo = ereg_replace("[^áéíóúÁÉÍÓÚñÑa-zA-Z ]", "", $_REQUEST["bar"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...