2015-09-12 3 views
0

У меня проблема с моей страницей регистрации, Я заметил, что люди могут регистрироваться с помощью альт-кодов, таких как «ªμ쪻, и я попытался исправить это, используя preg_replace, но когда я сделал это, не может зарегистрировать больше, по крайней мере, не с мировым алфавитомОтключение некоторых символов с preg_match

final public function validName($username) 
{ 
    if(strlen($username) <= 25 && ctype_alnum($username)) 
    {   
     return true;   
    }    

    return false; 
}  

попытался это исправить, заменив его с этим

if(strlen($username) <= 25 && preg_match("/[^a-zA-Z0-9]+/", $username)) 

Но я, очевидно, делает что-то неправильно ...

+0

вы позволяя пользователям иметь числовые значения в их _names_, когда они регистрируются? – user5173426

+0

Да, поскольку я хочу, чтобы люди использовали только буквы и цифры, но в моем случае они могут зарегистрироваться с помощью ªμμª ªªªª и подобных вещей, которые я им не хочу. –

+0

Я не могу воспроизвести проблему: 'var_dump (ctype_alnum (" ªμμª "));' возвращает 'false', как и ожидалось. Использование регулярного выражения кажется бесполезным. Возможно, проблема в другом месте вашего кода. –

ответ

1

По-видимому, вы вводите в заблуждение два разных применения метасимвола каретки (^).

В самом деле, это может быть две вещи в регулярном выражении:

  • Это может утверждающие начало предмета, который является то, что вы, вероятно, хотите.
  • Это может отрицать класс, что вы делаете в своем коде.

Источник: http://php.net/manual/en/regexp.reference.meta.php

Вот модифицированная версия коды, с кареткой (^) и доллара ($) знаками утверждать начало и конец строк вы анализирующие:

function validName($username) 
{ 
    if (strlen($username) <= 25 && preg_match("/^[a-zA-Z0-9]+$/", $username)) 
    {   
     return true;   
    }    

    return false; 
}  

$names = array(
    'Abc1', 
    'Abc$', 
    "ªµµª" 
); 

foreach ($names as $name) { 
    echo "<br>" . $name . ': ' . (validName($name) ? 'valid' : 'invalid'); 
} 

// -- Returns: 
// Abc1: valid 
// Abc$: invalid 
// ªµµª: invalid 

Обратите внимание, что вы можете уменьшить код внутри вашей функции в одной строке:

function validName($username) 
{ 
    return strlen($username) <= 25 && preg_match("/^[a-zA-Z0-9]+$/", $username); 
}  
+0

Очень ценится :) –

Смежные вопросы