我正在创建一项可以“走向国际”到非英语市场的服务。我不想将用户名限制为 ASCII 字符范围,但希望允许用户指定他们的“自然”用户名。好的,使用 UNICODE(并说 UTF-8 作为我的用户名文本编码)。
但!我不希望用户创建包含“符号”代码点的“非名称”用户名。例如,我不想允许像 √√√√√√øøøøø 这样的用户名。
是否有我可以检查(可能使用正则表达式)以接受/拒绝给定用户名的 UNICODE 的“符号”代码点列表?
谢谢!
我正在创建一项可以“走向国际”到非英语市场的服务。我不想将用户名限制为 ASCII 字符范围,但希望允许用户指定他们的“自然”用户名。好的,使用 UNICODE(并说 UTF-8 作为我的用户名文本编码)。
但!我不希望用户创建包含“符号”代码点的“非名称”用户名。例如,我不想允许像 √√√√√√øøøøø 这样的用户名。
是否有我可以检查(可能使用正则表达式)以接受/拒绝给定用户名的 UNICODE 的“符号”代码点列表?
谢谢!
Unicode 有几个类别,因此您可以轻松排除符号。具体如何做到这一点取决于您使用的语言。一些正则表达式框架内置了该功能,有些则没有。
在 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