【问题标题】:internationalized regular expression in postgresqlpostgresql 中的国际化正则表达式
【发布时间】:2011-04-18 17:09:41
【问题描述】:

如何编写正则表达式来匹配 postgres 中的“José”等名称。换句话说,我需要设置一个约束来检查是否只输入了有效的名称,但也希望允许 unicode 字符。

Regular expressions, unicode style对此有一些参考。但是,我似乎无法在 postgres 中编写它。

如果无法为此编写正则表达式,仅在客户端使用 javascript 进行检查就足够了

【问题讨论】:

    标签: regex postgresql unicode


    【解决方案1】:

    PostgreSQL 不像 .NET 那样支持基于 Unicode 字符数据库的字符类。你会得到更标准的 [[:alpha:]] 字符类,但这取决于语言环境,可能不会涵盖它。

    您可以通过将不需要的 ASCII 字符列入黑名单并允许所有非 ASCII 字符来摆脱困境。例如像

    [^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]+
    

    (JavaScript 也没有非 ASCII 字符类。甚至[[:alpha:]]。)

    例如,给定 v_text 作为要清理的文本变量:

    -- Allow internationalized text characters and remove undesired characters
    v_text = regexp_replace( lower(trim(v_text)), '[!"#$%&()*+,./:;<=>?\[\\\]\^_\|~]+', '', 'g' );
    

    【讨论】:

    • 该正则表达式将禁止' 字符,这是名称中很常见的字符。
    • 这在第 9.3 页仍然有效,但如果您正在阅读此内容并使用更新版本,请查看手册。将来可能会改变。
    猜你喜欢
    • 2019-05-30
    • 2015-03-01
    • 2022-07-22
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多