Проверьте номер телефона в SQL Server 2000 - PullRequest
0 голосов
/ 01 ноября 2010

Есть ли у кого-нибудь изящный способ проверки телефонных номеров с помощью sql (SQL Server 2000).

Мне нужно выбрать всех пользователей из базы данных, которые имеют действительный номер телефона

Спасибо, Sp

Valid number 
08450000000
01332000000
07444000000
+441332000000

Стандартные номера Великобритании

Ответы [ 4 ]

2 голосов
/ 08 ноября 2012

Позволяет пользователю вводить номера в различных форматах с различными префиксами набора и пунктуацией.

Удалите цифры префикса набора, удалите пробелы и знаки препинания. Подтвердите, что номер имеет правильное количество цифр и находится в допустимом диапазоне, а затем сохраните номер в базе данных в формате E.164 с полным кодом страны.

Это позволяет вам вносить массовые изменения кода города по мере их возникновения, а также упрощает однозначное получение всех номеров для страны.

Сохранить номер без пробелов и знаков препинания.

Используйте правила форматирования для конкретной страны, чтобы правильно отформатировать число для отображения.

Британские цифры довольно сложны. Здесь есть полные данные: http://www.aa -asterisk.org.uk / index.php / Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers

Подробно описывает процессы выбора, проверки и форматирования.

1 голос
/ 01 ноября 2010

Этот веб-сайт имеет очень тщательную проверку телефонных номеров в Великобритании с примерами кода на JavaScript, VBScript и PHP. Вам нужно будет перевести это для использования в хранимой процедуре SQL Server, но принцип должен быть простым, чтобы следовать.

Проверка телефонных номеров в Великобритании - JavaScript, VBScript и PHP

0 голосов
/ 01 ноября 2010

Если у вас есть регулярное выражение, соответствующее номеру, вы можете установить расширенную хранимую процедуру регулярного выражения на вашем SQL Server.Я установил эту расширенную хранимую процедуру на работе, и мы довольно часто ее используем.Существует несколько процедур (каждая с соответствующими функциональными оболочками):

  1. проверка совпадений (да, нет)
  2. проверка совпадений (количество)
  3. поиск и замена
  4. формат
  5. split

Чтобы найти совпадения, вы должны использовать его следующим образом:

 select number 
 from numberTable
 where dbo.fn_pcre_match(number, 'someRegex') = 1

Где 'someRegex' - регулярное выражениесоответствует формату, который вы ищете. На этом сайте есть некоторые совпадения, но я не уверен, насколько хорошо они работают, так как я не знаком с британскими номерами.

0 голосов
/ 01 ноября 2010

Я не знаю точных правил, которые определяют действительный номер телефона в Великобритании, и, поскольку вы не предоставили никаких правил для подтверждения номера телефона, я просто выбрал правила, указанные в URL, предоставленном Колином Пикардом в его ответе.

Следующие правила проверяются для подтверждения номера телефона в Великобритании - 1. Номер телефона не является нулевым 2. Номер телефона не содержит требуемых 10 или 11 цифр. 3. Действительные номера телефонов в Великобритании должны начинаться с 0

Если есть какие-то правила, которые я пропустил, вы также можете добавить проверку для этих условий в эту функцию.

ALTER FUNCTION [dbo].[ValidatePhoneNo] 
(   
    @PhoneNo varchar(20) 
)
RETURNS varchar(10)
AS
BEGIN
    DECLARE @Result varchar(10)
    SET @RESULT = 'invalid'

    IF len(@PhoneNo) > 9 AND len(@PhoneNo) < 12 AND @PhoneNo IS NOT NULL AND (substring(@PhoneNo,1,1) = 0)
    BEGIN
        SET @Result = 'valid'
    END

    RETURN @RESULT
END
...