Как узнать, содержит ли строка буквы и пробелы (php)? - PullRequest
0 голосов
/ 03 мая 2010

Поэтому мне нужно получить значение false или true, если строка содержит не только буквы всех европейских и восточных алфавитов, а также "" (пробел) и "-" минус. Как сделать такую ​​вещь с некоторой $ строкой?

Ответы [ 3 ]

3 голосов
/ 03 мая 2010

Попробуйте это:

if (preg_match('/^[\p{L&} -]+$/u', $a)) {
  # Only letters (any script), spaces and hyphens
} else {
  # Emtpy string or other characters too
}

\p{L} соответствует любому символу, который может быть частью слова в любом сценарии, включая иероглифы (например, китайские символы). \p{L&} соответствует только буквам алфавитных шрифтов (латинский, греческий, кириллица, тайский и т. Д.)

2 голосов
/ 03 мая 2010

Вот что регулярные-выражения.info должен сказать о предмете Unicode и PHP:

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

Самый важный набор функций регулярных выражений начинается с preg. Эти функции являются оболочкой PHP для библиотеки PCRE (Perl-совместимые регулярные выражения). Все, что сказано о разновидности регулярных выражений PCRE в руководстве по регулярным выражениям на этом сайте, относится к preg функциям PHP . Вы должны использовать функции preg для всего нового кода PHP, который использует регулярные выражения.

Специальной опцией является /u, который включает режим сопоставления Unicode вместо стандартного 8-разрядного режима сопоставления. Вы должны указать /u для регулярных выражений, которые используют \x{FFFF}, \X или \p{L} для сопоставления символов Unicode, графем, свойств или сценариев . PHP будет интерпретировать '/regex/u' как строку UTF-8, а не как строку ASCII.


Поддержка Unicode

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

Очень немногие движки регулярных выражений поддерживают сегодня сценарии Unicode. Из всех разновидностей, обсуждаемых в этом руководстве, только JGsoft, Perl и PCRE могут соответствовать сценариям Unicode . Вот полный список всех сценариев Unicode:

  • [... остальные опущены]

Поэтому, если вы хотите увидеть, состоит ли строка из только букв в кириллице в PHP, вы можете попытаться сопоставить ее с этим регулярным выражением:

/^\p{Cyrillic}*$/u
1 голос
/ 03 мая 2010

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

  • DOMDocument обрабатывает все внутри UTF8, независимо от того.
  • Включение в другой набор символов
  • База данных не выводится в Юникоде из-за отсутствия инструкции «SET NAMES ..».

Чего должен достичь код? Возможно, если мы посмотрим на ваш вопрос и перейдем к следующему шагу, то есть лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...