SQL手机号码验证

时间:2014-03-10 11:10:51

标签: sql-server validation mobile

我有我的sql数据库,我想过滤掉所有有效的手机号码。

我目前使用如下;

WHERE pn.PhoneNumber LIKE '+[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
OR pn.PhoneNumber LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
OR pn.PhoneNumber LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
OR pn.PhoneNumber LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]'

但我仍会收到000000000000等数字 有些数字不是爱尔兰手机,因为它们不以08开头 如果我希望数字的开头以087开头,我只需输入[0][8][7]而不是[0-9]来解决问题吗?

3 个答案:

答案 0 :(得分:1)

试试这个!

这会给出以087mobile(length)=10

开头的数字
select * from table where mobile_number like '087%' and LEN(mobile_number)=10

DEMO

答案 1 :(得分:0)

我会创建一个包含我感兴趣的所有前缀的表,然后使用它来进行验证。

像......那样的东西。

Create table Allowed ( Prefix VARCHAR(10) )

insert into allowed values ( '071' );
insert into allowed values ( '072' );
insert into allowed values ( '+44' );

select count(prefix) as OK
from allowed
where REPLACE( pn.phonenumber, ' ', '') like prefix || '%'

您仍然可以单独进行数值验证,或将正则表达式部分合并到上面添加的后缀中。

答案 2 :(得分:0)

我知道这已经过时了,但只为有人可能觉得有用的英国手机号码开发了代码。在前5个号码后检查是否有空格,连字符等,如果号码无效则返回空白 - 我需要将记录上传到拒绝包含无效手机号码但接受空白的记录的第三方。

Mobile = CASE WHEN MobileTel LIKE '07[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%' THEN left(MobileTel,11) WHEN MobileTel LIKE '07[0-9][0-9][0-9][^0-9][0-9][0-9][0-9][0-9][0-9][0-9]%' THEN  (LEFT(MobileTel,5)+substring(MobileTel,7,6)) ELSE '' END