Как разрешить подмножество кодовых точек UNICODE при проверке входных данных? - PullRequest
3 голосов
/ 06 октября 2009

Я создаю сервис, который может «выйти на международный уровень» на неанглоязычных рынках. Я не хочу ограничивать имя пользователя диапазоном символов ASCII, но хотел бы позволить пользователю указать свое «естественное» имя пользователя. Хорошо, используйте UNICODE (и скажите UTF-8 в качестве кодировки текста моего имени пользователя).

Но! Я не хочу, чтобы пользователи создавали «неименные» имена пользователей, содержащие «символьные» кодовые точки. Например, я не хочу разрешать имя пользователя, такое как √√√√√√øøøøø.

Есть ли список кодовых точек "символа" для UNICODE, который я могу проверить (возможно, с помощью регулярного выражения), чтобы принять / отклонить данное имя пользователя?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 06 октября 2009

Unicode имеет несколько категорий , так что вы можете легко исключить символы. Как именно это сделать, зависит от языка, который вы используете. В некоторых средах регулярных выражений эта функция встроена, а в некоторых нет.

0 голосов
/ 15 июня 2017

В Python (за Проверка ввода текста Unicode произвольной формы в Python ):

def only_letters(s):
    """
    Returns True if the input text consists of letters and ideographs only, False otherwise.
    """
    for c in s:
        cat = unicodedata.category(c)
        # Ll=lowercase, Lu=uppercase, Lo=ideographs
        if cat not in ('Ll','Lu','Lo'):
            return False
    return True

> only_letters('Bzdrężyło')
True
> only_letters('He7lo') # we don't allow digits here
False
...