【问题标题】:How does one allow a subset of UNICODE codepoints in input validation?如何在输入验证中允许 UNICODE 代码点的子集?
【发布时间】:2009-10-06 15:41:23
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: validation unicode codepoint


    【解决方案1】:

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

    【讨论】:

    • 啊,我不知道这个!那很完美。谢谢。
    • 我想出于我的目的,我将允许以下任何类别的代码点:[Ll] 字母,小写 [Lm] 字母,修饰符 [Lo] 字母,其他 [Lt] 字母,标题大写 [Lu ] 字母,大写
    • 嗯,比如Perl支持一个伪类的正则表达式,叫做IsWord,定义为:Ll+Lu+Lt+Lo+Nd
    【解决方案2】:

    在 Python 中(根据 Input validation of free-form Unicode text in 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
    

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多