如何强制中文等亚洲语言的字符长度?

时间:2017-09-10 02:07:06

标签: python django postgresql unicode chinese-locale

使用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方式中,强制最大字符串长度的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

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

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

>>> len(u"한")
3

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

如果您希望计算unicode字符而不是字形,那么它很简单。只需使用带有CharField参数的max_length(在您的模型和表单上)。

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

这种验证器的有用库可能是grapheme,它可以计算字符串中字素的数量。