3

我正在创建一项可以“走向国际”到非英语市场的服务。我不想将用户名限制为 ASCII 字符范围,但希望允许用户指定他们的“自然”用户名。好的,使用 UNICODE(并说 UTF-8 作为我的用户名文本编码)。

但!我不希望用户创建包含“符号”代码点的“非名称”用户名。例如,我不想允许像 √√√√√√øøøøø 这样的用户名。

是否有我可以检查(可能使用正则表达式)以接受/拒绝给定用户名的 UNICODE 的“符号”代码点列表?

谢谢!

4

2 回答 2

5

Unicode 有几个类别,因此您可以轻松排除符号。具体如何做到这一点取决于您使用的语言。一些正则表达式框架内置了该功能,有些则没有。

于 2009-10-06T15:51:28.737 回答
0

在 Python 中(根据 Python中自由格式 Unicode 文本的输入验证):

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
于 2017-06-15T17:16:40.287 回答