Как добавить проверку на номер телефона? - PullRequest
1 голос
/ 10 февраля 2020

Как мне добавить проверку на номер телефона, чтобы она была 11 номерами, но начинать с номера 0 и разрешить + - et c? Но все же, будьте немного гибкими, позволяя цифры. Мой лектор сказал мне использовать оператор «ИЛИ», но я не уверен, как заставить его работать

У меня есть это в настоящее время, но оно не позволяет '+ - ()' и т. Д. c, я знаю, как использовать оператор «ИЛИ», но я не уверен, как его прикрепить к этому:

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 плюс.

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

Вот что я собрал:

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 цифрами c.
  • Второе условие проверяет, является ли строка длиной 12 символов, но без символа +. Если это так, проверьте, начинается ли оно с +, и проверьте, заканчивается ли оно 12 числами.
  • В-третьих, сначала проверяется длина строки без символа -, а затем проверяется, начинается ли строка с 4 числа и заканчиваются 3 числами.
1 голос
/ 10 февраля 2020

Я бы порекомендовал регулярные выражения. Нечто подобное похоже на то, что вы описываете:

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