【问题标题】:Any python/django function to check whether a string only contains characters included in my database collation?任何 python/django 函数来检查字符串是否仅包含我的数据库排序规则中包含的字符?
【发布时间】:2011-01-21 15:16:45
【问题描述】:

正如预期的那样,我在输入一些未包含在我的数据库排序规则中的字符时出现错误:

(1267, "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='")

我可以使用任何函数来确保字符串仅包含我的数据库排序规则中存在的字符吗?

谢谢

【问题讨论】:

    标签: database django collation


    【解决方案1】:

    我会看看 Python 的 unicode.translate() 和 codec.encode() 函数。这两种方法都可以更优雅地处理非法输入字符,并且 IIRC,translate() 已被证明比类似用例的正则表达式更快(应该很容易在谷歌上搜索结果)。

    来自 Python 的文档:

    "对于 Unicode 对象, translate() 方法不接受可选的 deletechars 参数。相反,它返回 s 的副本,其中所有字符都已通过给定的转换表映射,该转换表必须是 Unicode 序数到“

    http://docs.python.org/library/stdtypes.html

    http://docs.python.org/library/codecs.html

    【讨论】:

      【解决方案2】:

      您可以使用正则表达式来只允许某些字符。以下仅允许字母、数字和 _(下划线),但您可以更改以包含任何您想要的内容:

      import re
      
      exp = '^[A-Za-z0-9_]+$'
      re.match(exp, my_string)
      

      如果返回一个对象,则找到匹配项,如果没有返回值,则为无效字符串。

      【讨论】:

      • 没有实现匹配“utf8_general_ci”集合的正则表达式的函数?我必须手动完成吗?还是谢谢
      猜你喜欢
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2012-03-27
      • 2015-09-08
      • 1970-01-01
      • 2020-03-17
      相关资源
      最近更新 更多