如何在 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 个数字:
- 07123456789
- +447123456789
- 0121-258-3630
- 07436-123-322
这些是我一直在寻找的四个标准,好吧,这就是当用户将 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}')))
)
通过使用 and
和 or
运算符,我创建了 3 个不同的条件来检查:
- 首先,我检查列的长度
phone
,如果它有 11 个字符长,那么还要检查这 11 个字符中的每个字符是否都是数字。
- 第二个条件检查字符串是否为 12 个字符长但没有字符
+
。如果是,则检查它是否以 +
开头并检查它是否以 12 个数字结尾。
- 第三种是首先检查不带字符的字符串的长度
-
,然后检查字符串是否以 4 个数字开头并以 3 个数字结尾。
我如何将 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 个数字:
- 07123456789
- +447123456789
- 0121-258-3630
- 07436-123-322
这些是我一直在寻找的四个标准,好吧,这就是当用户将 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}')))
)
通过使用 and
和 or
运算符,我创建了 3 个不同的条件来检查:
- 首先,我检查列的长度
phone
,如果它有 11 个字符长,那么还要检查这 11 个字符中的每个字符是否都是数字。 - 第二个条件检查字符串是否为 12 个字符长但没有字符
+
。如果是,则检查它是否以+
开头并检查它是否以 12 个数字结尾。 - 第三种是首先检查不带字符的字符串的长度
-
,然后检查字符串是否以 4 个数字开头并以 3 个数字结尾。