我必须进行oracle约束,检查用户名是否至少是3个小写字母,最多是10个小写字母。
我用过
constraint usernameSMALLCASE check (
REGEXP_Like(username,'^[a-z]{10}$') or
REGEXP_Like(username,'^[a-z]{9}$') or
REGEXP_Like(username,'^[a-z]{8}$') or
REGEXP_Like(username,'^[a-z]{7}$') or
REGEXP_Like(username,'^[a-z]{6}$') or
REGEXP_Like(username,'^[a-z]{5}$') or
REGEXP_Like(username,'^[a-z]{4}$') or
REGEXP_Like(username,'^[a-z]{3}$')
)
然而,它不起作用。不知何故,投入美元是造成问题的原因。但我必须放$以确保行尾字符也是小写。
2条答案
按热度按时间b4lqfgs41#
如果列声明正确,代码应该可以工作。但你可以大大简化它:
显然,除了正则表达式之外,还有其他方法可以处理这个问题。但是,您已经开始使用正则表达式,使用正则表达式非常简单。
如果您坚持使用固定长度的列,可以将其表示为:
ef1yzkbh2#
为创建约束
数据类型可以强制的最大长度
注意,正则表达式
^[a-z]{3,10}$
不完全可靠,请参见正则表达式中的字符类“[::]”一个不起作用的例子是:
退货
TRUE
(尽管h
不是介于a-d
)因为ch
在传统西班牙语中被认为是一个排序字符。我认为100%可靠的约束是这样的: