验证SQL Server 2000中的电话号码

时间:2010-11-01 11:49:35

标签: sql sql-server sql-server-2000

有没有人有一种使用sql(SQL Server 2000)验证电话号码的好方法。

我需要从ma Db中选择所有有效电话号码的用户

由于 属

Valid number 
08450000000
01332000000
07444000000
+441332000000

标准英国号码

4 个答案:

答案 0 :(得分:2)

允许用户输入各种格式的数字,并带有各种拨号前缀和标点符号。

剥去拨号前缀数字,删除间距和标点符号。验证号码是否具有正确的位数并且在有效范围内,然后将该号码以E.164格式存储在数据库中,并附带完整的国家代码。

这使您可以在发生批量区域代码时进行更改,并且可以轻松地明确地为国家/地区提取所有数字。

存储号码,不加空格或标点符号。

使用特定国家/地区的格式设置规则正确格式化数字以进行显示。

英国的数字相当复杂。这里有完整的数据: http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers

详细描述了选择,验证和格式化过程。

答案 1 :(得分:1)

此网站对英国电话号码进行了非常彻底的验证,其中包含JavaScript,VBScript和& Sons中的代码示例。 PHP。您需要将其翻译为在SQL Server存储过程中使用,但原则应该很容易理解。

UK Telephone Number Validation - JavaScript, VBScript, & PHP

答案 2 :(得分:0)

如果您有一个与该数字匹配的正则表达式,则可以在SQL Server上安装正则表达式扩展存储过程。我在工作中安装了this extended stored procedure,我们使用它很多。有几个过程(每个过程都有相应的函数包装器):

  1. 检查匹配(是,否)
  2. 检查匹配(计数)
  3. 搜索并替换
  4. 格式
  5. 分割
  6. 要查找匹配项,您可以使用它:

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

    其中'someRegex'是与您要查找的格式匹配的正则表达式。 This site有一些匹配,但我不确定他们的工作情况,因为我不熟悉英国的数字。

答案 3 :(得分:-1)

我不知道定义有效英国电话号码的确切规则,因为您没有提供任何验证电话号码的规则,我只选择了Colin Pickard在其答案中提供的网址中列出的规则。

检查以下规则以验证英国电话号码 - 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