【问题标题】:How to enforce character length for asian languages such as chinese?如何强制亚洲语言(如中文)的字符长度?
【发布时间】:2018-02-18 13:44:05
【问题描述】:

使用 Django v1.10 和 Postgres

有一个数据字段可能包含混合符号(例如 \|?)、数字、字母以及亚洲语言字符。

用户说此字段的最大值应为 15 个字符。

如何使用 Django 和 Postgres 作为数据库来执行此操作?在 postgres 中,我们使用 utf-8 编码。

1个字符可以是数字或汉字或英文字母

我知道在 PHP 中有一个叫做 mb_strlen 的函数。 And in python, the equivalent would be to use unicode strings.

在 Django 方式中,强制最大字符串长度的最佳方式是什么?

【问题讨论】:

    标签: python django postgresql unicode chinese-locale


    【解决方案1】:

    首先,您必须先定义字符的含义。您提到了韩语,这是许多字符串长度函数误解的语言之一。

    多个 unicode 字符可用于描述单个字素(用户感知字符),例如:

    >>> len(u"한")
    3
    

    使用 unicode 字符串可以轻松计算 unicode 字符的数量,但这与用户感知字符的数量不同。我建议在python text length阅读这篇文章。

    如果您确实希望计算 unicode 字符而不是字素,那么这很简单。只需使用 CharFieldmax_length 参数(在您的模型和表单上)。

    但是,如果您希望将字段限制为最多 15 个字素,则必须让数据库字段包含比这更多的字符并为您的表单创建一些 custom validation

    grapheme 可能是此类验证器的一个有用库,它可以计算字符串中的字素数。

    【讨论】:

    • 我已将字符定义为数字、字母或汉字
    • 字母也不是真正的定义。例如,上面使用的符号 한 由三个 unicode 字符(韩文音节)组成:ㅎ、ㅏ 和ㄴ。 한的长度是1还是3?
    • 我排除了韩语和日语
    • 好的,看来您只想计算 unicode 字符,而不是字素。你有 django 模型吗?你希望它在哪里执行?正如我所写,最常见的方法是在模型上使用 max_length=15 的 CharField,这将创建一个 15 字符的数据库列并验证生成的 ModelForms 中的长度。
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2016-04-16
    • 2013-03-02
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多