2010-10-14 3 views
9

Как использовать preg_match, чтобы увидеть, существуют ли специальные символы [^'£$%^&*()}{@:'#~?><>,;@|\-=-_+-¬`] в строке?preg_match специальные символы

+3

Определить "специальные символы" ... –

+0

[^ '£ $%^& *()} {@:'? # ~><>; @ | \ - = - _ + - ¬'] – stefanosn

+2

Почему вы хотите использовать 'preg_match()'? Если все, что вы делаете, проверяет наличие этих символов, почему бы не использовать 'strpos()'? – staticsan

ответ

7

[\W]+ будет соответствовать любому символу, отличному от слова.

+0

Спасибо за ваш ответ, но мне нужны только определенные символы, такие как^'£ $%^& *()} {@:' # ~?><>,; @ | \ = = -_ + - ¬' – stefanosn

+0

Обычно I 'd say '[\ W]' по-прежнему идеально подходит для вас, поскольку «символ слова» относится к любой букве, номеру или подчеркиванию и исключает все остальное. Я не уверен, включает ли он дефис. Затем я заметил, что подчеркивание было в списке символов, которые вы хотите проверить. Поскольку вы хотите только найти одиночные символы, может быть проще использовать 'explode()' и 'in_array()' вместо 'preg_match()' или просто использовать цикл while(). Хотя ни один из них не очень интуитивно понятен. – stevendesu

+0

Что делать, если строка содержит символ Unicode? Ваше регулярное выражение исключает их! – Emerald214

9

Использование preg_match. Эта функция принимает регулярное выражение (шаблон) и строку субъекта и возвращает 1, если произошло совпадение, 0, если нет совпадения, или false, если произошла ошибка.

$input = 'foo'; 
$pattern = '/[\'\/~`\[email protected]#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/'; 

if (preg_match($pattern, $input)){ 
    // one or more matches occurred, i.e. a special character exists in $input 
} 

Вы также можете указать флаги и смещение для выполнить регулярное выражение функции. См. Ссылку на документацию выше.

+0

Есть ли ссылка/ссылка для отдельных символов? – asterisk

3

Моя функция облегчает жизнь.

function has_specchar($x,$excludes=array()){ 
    if (is_array($excludes)&&!empty($excludes)) { 
     foreach ($excludes as $exclude) { 
      $x=str_replace($exclude,'',$x);   
     }  
    }  
    if (preg_match('/[^a-z0-9 ]+/i',$x)) { 
     return true;   
    } 
    return false; 
} 

Второй параметр ($ исключает) может передаваться со значениями, которые вы хотите игнорировать.

Использование

$string = 'testing_123'; 
if (has_specchar($string)) { 
    // special characters found 
} 

$string = 'testing_123'; 
$excludes = array('_'); 
if (has_specchar($string,$excludes)) { } // false 
Смежные вопросы