2014-01-09 1 views
2

Может ли кто-нибудь помочь мне написать правила preg_match, чтобы определить, является ли строка ввода символом кода Юникода?Регулярное выражение для символа Юникода типа xe2 x98 xba

Вот список символов:

http://www.utf8-chartable.de/unicode-utf8-table.pl?start=9728&number=128&utf8=string-literal

Я хочу написать методы для обнаружения входной строки, является ли смайликов

function detectEmoticons($input) { 
    if (preg_match("/REGEX/", $input)) { 
     return TRUE; 
    } else { 
     return FALSE; 
    } 
} 

Если вход является строкой, как " \ xe2 \ x98 \ x80 "или" \ xe2 \ x98 \ x81 "... и т. д. (весь доступный в списке таскатор http://www.utf8-chartable.de/unicode-utf8-table.pl?start=9728&number=128&utf8=string-literal), то он должен вернуть

TRUE 

Спасибо заранее,
Uttam

+0

ли содержимое строки буквально '\ XE2 \ x98 \ x80', или сделать вы имеете в виду строковый литерал строки '' \ xe2 \ x98 \ x80 "', который затем содержит кодированный символ UTF-8 «☀»? – deceze

+0

Нет, это как «\ xe2 \ x98 \ x80». –

+0

Это не символ «Юникод», то это байтовая последовательность escape-кода для одного ... – deceze

ответ

0

Для соответствия символов Unicode в регулярном выражениях вы должны добавить модификатор у

Пример:

function detectEmoticons($input) { 
    if (preg_match("/REGEX/u", $input)) { 
     return TRUE; 
    } else { 
     return FALSE; 
    } 
} 

Если вы должны получить один из набор, который вы могли бы пройти диапазон символов, например

/[\x{START}-\x{END}]/u 

Или проверить все символы с функцией mb_strpos

Пример

function detectEmoticons($input) { 
    $characters = array("\xe2", "\x98", ...); 

    foreach ($characters as $v) { 
     if (mb_strpos($input, $v) !== false) 
      return true; 
    } 

    return false; 
} 

Вы можете найти документацию здесь: http://ch1.php.net/manual/en/reference.pcre.pattern.modifiers.php http://ch2.php.net/manual/en/function.mb-strpos.php

+1

Я думаю, что OP ищет помощь в написании самого регулярного выражения, поэтому я не уверен, что это правильный ответ. –

+0

Извините, я не понял. –

+0

Эй, спасибо за ваше время и силы. Я думаю, что Шаранья Дутта дала мне правильный ответ. –

5

Во-первых, используйте модификатор u, если вы хотите, чтобы ваше регулярное выражение для работы с unicode. Во-вторых, используйте класс символов для всех символов в диапазоне [\x{2600}-\x{267F}] (то есть U + 2600 до U + 267F). Теперь вы можете написать функцию:

function detectEmoticons($input){ 
    if(preg_match("/[\x{2600}-\x{267F}]/u", $input)){ 
    return TRUE; 
    } 
    else{ 
    return FALSE; 
    } 
} 
+0

@SharanyaDutta Ницца, узнал что-то! Сделал бы 'preg_match ('~ \ xE2 [\ x98- \ x99] [\ x80- \ xBF] ~', $ str);' –

0

попробовать этот

preg_match("/\\[a-zA-Z0-9_-]{1,}\\[a-zA-Z0-9_-]{1,}\\[a-zA-Z0-9_-]{3}/", $input); 

Используйте preg_replace для усиков

preg_replace("/\\[a-zA-Z0-9_-]{1,}\\[a-zA-Z0-9_-]{1,}\\[a-zA-Z0-9_-]{3}/",'', $input); 
Смежные вопросы