使用检查约束来确保varchar包含字母和数字

时间:2014-04-28 04:41:50

标签: sql postgresql check-constraints

我正在尝试创建一个检查约束,以确保存储的varchar具有至少1个字母和1个数字,并且我不确定如何执行此操作。任何帮助将不胜感激。

这是我到目前为止所做的:

CHECK (VALUE LIKE [a-z] AND LIKE [0-9])

这会有用吗?

感谢。

2 个答案:

答案 0 :(得分:2)

该语法无效,因此无法正常工作。至少您需要引用LIKE表达式中的模式值。他们还必须有通配符,所以他们没有锚定;此刻,您的表达式试图说“值必须是单个字符,这是一个字母,而单个字符是一个数字”。这是不可能的。此外,您无法在([...])中使用字符类LIKE

你想要的是使用一对简单的正则表达式。这样:

CHECK (thevalue ~ '[[:alpha:]]' AND thevalue ~ '\d')`

会做的。

你可以用表达式玩一些简单的游戏来强迫它成为一个正则表达式,但我认为没有多大意义,它只会更难以阅读和丑陋。

所有这一切,我担心您可能会尝试验证密码强度。如果你这样做那么这绝对是错误的方法。 使用CHECK约束 - 在所有现有行都通过约束之前,您将无法引入更强的要求。在您的应用程序中将检查作为输入验证,并使用正确的密码强度检查工具 - 已经存在 - 而不是自己滚动。

答案 1 :(得分:0)