有没有人有一种使用sql(SQL Server 2000)验证电话号码的好方法。
我需要从ma Db中选择所有有效电话号码的用户
由于 属
Valid number
08450000000
01332000000
07444000000
+441332000000
标准英国号码
答案 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,我们使用它很多。有几个过程(每个过程都有相应的函数包装器):
要查找匹配项,您可以使用它:
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