我需要一个满足以下条件的sql regexp模式。
1.接受中文字符,2.接受- a-z,A-Z,0-9,空格3.仅拒绝特殊字符。
我试过以下方法。
Select regexp_like((val)::TEXT , ('^[ !-’~¡-ÿ]*$')::TEXT)
Or
regexp_like((瓦尔)::TEXT,('^[^[:ascii:]]+$')::text);
上面的查询也接受不应该接受的特殊字符。
SELECT(('#$$')::TEXT ~('^[a-zA-Z0-9]*$'));
此查询满足,但无法接受中文字符。
2条答案
按热度按时间ojsjcaue1#
您可以使用中文字符的unicode值
41zrol4v2#
根据 Wikipedia,中文字符在以下Unicode范围内,U+4 E00到U+9 FFF。* 维基百科-中日韩统一表意文字 .
此外,还有 * 扩展A到H。
因此,您可以向字符类添加Unicode范围,如下所示。
我想你提供的值,是你想拒绝的字符。
对于提供的范围,!到',您希望跳过数字字符 0到9 以及大写字母 A到Z。
因此,需要将其更改为以下内容。
然后可以使用 character class intersection 语法 && 将此字符类添加到前一个。
因此,完整的模式如下所示。