1

Тема: Регистрация имени пользователя без цифр и прочих символов

Здравствуйте!
Есть необходимость создания условия при регистрации нового пользователя на форуме (PunBB 1.4.2), в которых он сможет использовать только русские или латинские символы и знак пробела, т.е. чтобы у пользователей были настоящие имена.
Нашёл в файле include/functions.php строчки, проверяющие имя пользователя ($username):

    // Convert multiple whitespace characters into one (to prevent people from registering with indistinguishable usernames)
    $username = preg_replace('#\s+#s', ' ', $username);

    // Validate username
    if (utf8_strlen($username) < 2)
        $errors[] = $lang_profile['Username too short'];
    else if (utf8_strlen($username) > 25)
        $errors[] = $lang_profile['Username too long'];
    else if (strtolower($username) == 'guest' || utf8_strtolower($username) == utf8_strtolower($lang_common['Guest']))
        $errors[] = $lang_profile['Username guest'];
    else if (preg_match('/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/', $username) || preg_match('/((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))/', $username))
        $errors[] = $lang_profile['Username IP'];
    else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)
        $errors[] = $lang_profile['Username reserved chars'];
    else if (preg_match('/(?:\[\/?(?:b|u|i|h|colou?r|quote|code|img|url|email|list)\]|\[(?:code|quote|list)=)/i', $username))
        $errors[] = $lang_profile['Username BBCode'];

Не могу разобраться в этих preg_match проверках.

Подскажите, пожалуйста, какое выражение будет сооветствовать "все символы от 1) а-яА-Я 2) a-zA-Z " ? + возможность одного пробела, которая, я так понимаю, задаётся тут:

$username = preg_replace('#\s+#s', ' ', $username);

Т.е. без цифр и прочих символов.

И ещё вопрос. Как убрать авто-подстановку в поле имени пользователя, при наборе email ? Не могу найти...

Поделиться

2

Re: Регистрация имени пользователя без цифр и прочих символов

В конец добавить:

else if (preg_match('/[a-zа-я\s]/i', $username))
$errors[] = 'Имя пользователя не такое как надо';

Через хук (расширение)

Использую: sql - php - yii - ajax - jq - js - css - bootstrap - less - html - knockout js - ruby on rails.
Интересно: css3, html5 -> appCache, workers, sockets и т.д.
Будущее: адаптивные сайты (они же и локальные приложения).

Поделиться

3

Re: Регистрация имени пользователя без цифр и прочих символов

brainiac пишет:

Через хук (расширение)

А как это, через хук?

Поделиться

4

Re: Регистрация имени пользователя без цифр и прочих символов

по моему надо ^ добавить:

'/[^a-zа-я\s]/i'

если есть хоть один символ не входящий в набор

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

5

Re: Регистрация имени пользователя без цифр и прочих символов

по моему надо ^ добавить:

да, забыл )

А как это, через хук?

HOWTO: Создание расширений.

Использую: sql - php - yii - ajax - jq - js - css - bootstrap - less - html - knockout js - ruby on rails.
Интересно: css3, html5 -> appCache, workers, sockets и т.д.
Будущее: адаптивные сайты (они же и локальные приложения).

Поделиться

6 (28.09.2012 04:22 отредактировано Serg)

Re: Регистрация имени пользователя без цифр и прочих символов

Serg пишет:

И ещё вопрос. Как убрать авто-подстановку: при регистрации, когда набираешь email, имя до @ автоматически подставляется в поле имени пользователя? Не могу найти...

?

Поделиться

7

Re: Регистрация имени пользователя без цифр и прочих символов

Serg пишет:
Serg пишет:

И ещё вопрос. Как убрать авто-подстановку: при регистрации, когда набираешь email, имя до @ автоматически подставляется в поле имени пользователя? Не могу найти...

?

Где эта тема сидит? )

Поделиться

8

Re: Регистрация имени пользователя без цифр и прочих символов

include/js/min/punbb.common.min.js


если привести в порядок, то функция выглядит вот так

attachUsernameFromEmail: function () {
    var m = function (f) {
        return (f.tagName.toUpperCase() == "INPUT" && f.type == "email" && f.getAttribute("data-suggest-role") === "email");
    };
    var p = function (f) {
        return (f.tagName.toUpperCase() == "INPUT" && f.type == "text" && f.getAttribute("data-suggest-role") === "username");
    };
    var j, n, g = document.forms;
    for (j = 0, n = g.length;
    j < n;
    j += 1) {
        var l = g[j],
            k = -1,
            h = -1;
        if (!PUNBB.common.hasClass(l, "frm-suggest-username")) {
            continue;
        }
        k = PUNBB.common.find(m, l.elements);
        h = PUNBB.common.find(p, l.elements);
        if (k > 0 && h > 0) {
            var o = function (f) {
                return function (i) {
                    c(this, f);
                };
            };
            l.elements[k].onkeyup = o(l.elements[h]);
        }
    }
},

Поделиться

9

Re: Регистрация имени пользователя без цифр и прочих символов

floop, благодарю, надеюсь, не страшно, если я эту функцию просто уберу?! )

Поделиться

10

Re: Регистрация имени пользователя без цифр и прочих символов

Если правильно уберешь то ничего не будет)

Поделиться

11

Re: Регистрация имени пользователя без цифр и прочих символов

Убрал ровно в тех рамках, что ты указал. Вроде всё хорошо smile

Поделиться

12

Re: Регистрация имени пользователя без цифр и прочих символов

brainiac пишет:

В конец добавить:

else if (preg_match('/[^a-zа-я\s]/i', $username))
$errors[] = 'Имя пользователя не такое как надо';

Через хук (расширение)

Ребят, почитала про создание расширений, но что-то так и не поняла, чего и куда вставлять... А точнее, какой именно хук править в данном случае...

Подскажите, пожалуйста!

Поделиться