sql - 如何在电话号码上添加验证?
问题描述
我如何将电话号码的验证添加为 11 个数字,但以数字 0 开头并允许 +- 等?但是,通过允许数字来有点灵活。我的讲师告诉我使用“或”语句,但我不知道如何让它发挥作用
我目前有这个,但它不允许'+-()'等,我知道如何使用'OR'语句,但我不知道如何将它附加到这个:
CONSTRAINT tutorPhonenumber1_ck
CHECK (Phonenumber like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
谢谢大家的回答,VBoka的回答基本上是完美的。
我意识到我没有举出我的目标的例子。
可接受的电话号码:
- 07123456789
- +447123456789
- 0121-258-3630
- 07436-123-322
这是我一直在寻找的四个标准,嗯,这就是当用户将电话号码输入我的数据库时我可以考虑的。
最后,电话号码不应该接受字母——某人不应该能够在电话号码中输入“a”。
很抱歉没有先解决这个问题:)
我正在使用 sql plus。
谢谢
解决方案
以下是我整理的内容:
check ( (length(phone) = 11 and
phone like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
or
(regexp_count(replace(phone,'+',''), '[0-9]') = 12 and
phone like '+%' and
regexp_like((reverse(phone)), '^[0-9]{12}'))
or
(regexp_count(replace(phone,'-',''), '[0-9]') = 11 and
(regexp_like((phone), '^[0-9]{4}') and
regexp_like((reverse(phone)), '^[0-9]{4}')) or
(regexp_like((phone), '^[0-9]{5}') and
regexp_like((reverse(phone)), '^[0-9]{3}')))
)
通过使用and
和or
运算符,我创建了 3 个不同的条件进行检查:
- 首先,我检查列的长度,
phone
如果它是 11 个字符长,那么还要检查这 11 个字符中的每个字符是否都是数字。 - 第二个条件检查字符串是否有 12 个字符长但没有字符
+
。如果是,则检查它是否以 12 个数字开头+
并检查它是否以 12 个数字结尾。 - 第三是首先检查没有字符的字符串的长度,
-
然后检查字符串是否以 4 个数字开头,是否以 3 个数字结尾。
推荐阅读
- java - 计算大多数元音java
- jquery - 来自动态创建的文本框的实时反馈
- javascript - 如何在 foreach 中注册 Promise 并解决所有问题?
- c# - 如何在 SQL Server 中存储哪个用户访问了哪个页面
- r - R中的子集data.frame不会改变回归结果
- reactjs - 在 Laravel 5.7 React 应用程序中,收到错误:“classProperties”当前未启用
- templates - CKFinder 缩略图显示模板
- javascript - 开关返回值未定义
- python - 测试数据集上的 TensorFlow 对象检测模型评估
- c - 遍历目录并打印一些信息