如何在 phone 号码上添加验证?

How to add validation on a phone number?

我如何将 phone 数字的验证添加为 11 个数字,但从数字 0 开始并允许 +- 等?但是,通过允许数字来保持一点灵活性。我的讲师告诉我使用 'OR' 语句,但我不确定如何让它工作

我目前有这个,但它不允许“+-()”等,我知道如何使用 '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的回答基本完美

我意识到我没有举例说明我的目标是什么。

可接受的 phone 个数字:

这些是我一直在寻找的四个标准,好吧,这就是当用户将 phone 数字输入我的数据库时我能想到的。

最后,phone 号码不应该接受字母——某人不应该能够在 phone 号码中输入 'a'。

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

我正在使用 sql plus。

谢谢

我会推荐正则表达式。类似这样的内容似乎符合您的描述:

check (regexp_count(phone, '[0-9]') = 11 and
       regexp_like(phone, '^0[-+0-9]+$')
      )

这是我整理的:

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 个数字结尾。
  • 第三种是首先检查不带字符的字符串的长度-,然后检查字符串是否以 4 个数字开头并以 3 个数字结尾。