此
Check Load (1.0ms) SELECT "checks".* FROM "checks" WHERE (title ~* '[p{L}]+' and state @@ 'saved')
仅匹配英文字符,但如何捕获任何语言字符?
答案 0 :(得分:1)
AFAIK此功能在PostgreSQL中不可用。 This answer似乎同意。它已经有3年了,所以从那以后可能会发生一些变化,但如果有的话我就不知道了。
来自原始海报:
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)), '[!"#$%&()*+,./:;<=>?\[\\\]\^_\|~]+'
编辑:请注意下面的@depesz答案。在Linux中可以使用[[:lower:]]
和[[:upper:]]
个字符类来处理Postgres,因为Linux的ctype实现(似乎是)基于UTF-8。我不确定这是一个“开箱即用”配置还是某种升级,但很高兴知道它是可能的。
答案 1 :(得分:1)
我编写了一个将PCRE集成到PostgreSQL中的扩展程序:https://github.com/petere/pgpcre。它更好地支持Unicode属性。你可以写点像
title ~ pcre '^\p{L}'
答案 2 :(得分:0)
为什么不使用普通班 - [:lower:]和[:upper:]?检查一下:
$ select w, w ~ '^[[:lower:][:upper:]]+$' from ( values ( 'aBc'::text ), ('żÓŁW'), ('123')) as x (w);
w | ?column?
------+----------
aBc | t
żÓŁW | t
123 | f
(3 rows)