首页 > 解决方案 > 如何在电话号码上添加验证?

问题描述

我如何将电话号码的验证添加为 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的回答基本上是完美的。

我意识到我没有举出我的目标的例子。

可接受的电话号码:

这是我一直在寻找的四个标准,嗯,这就是当用户将电话号码输入我的数据库时我可以考虑的。

最后,电话号码不应该接受字母——某人不应该能够在电话号码中输入“a”。

很抱歉没有先解决这个问题:)

我正在使用 sql plus。

谢谢

标签: sqloraclecheck-constraints

解决方案


以下是我整理的内容:

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}')))
       )

通过使用andor运算符,我创建了 3 个不同的条件进行检查:

  • 首先,我检查列的长度,phone如果它是 11 个字符长,那么还要检查这 11 个字符中的每个字符是否都是数字。
  • 第二个条件检查字符串是否有 12 个字符长但没有字符+。如果是,则检查它是否以 12 个数字开头+并检查它是否以 12 个数字结尾。
  • 第三是首先检查没有字符的字符串的长度,-然后检查字符串是否以 4 个数字开头,是否以 3 个数字结尾。

推荐阅读