#!usr/bin/python3
#encoding:UTF-8
'''
功能:判断手机号是否存在某个库里面
中国电信号段
133、149、153、173、177、180、181、189、191、199
中国联通号段
130、131、132、145、155、156、166、171、175、176、185、186
中国移动号段
134、135、136、137、138、139、147、150、151、152、157、158、159、172、178、182、183、184、187、188、198
'''
import re
import MySQLdb as mdb
import traceback
class Select_Number:
host = ''
port = 0
user = ''
passwd = ''
db = ''
tablename = ''
table_fieldname = ''
phone_Number = ' '
def __init__(self, host, port, user, passwd, db, tablename, table_fieldname, phone_Number):
self.host = host
self.port = port
self.user = user
self.passwd = passwd
self.db = db
self.tablename = tablename
self.table_fieldname = table_fieldname
self.phone_Number = phone_Number
def connect_Database(self):
##连接数据库
L_phone = [] ##定义一个列表用于存放正确的电话号码
try:
conn = mdb.connect(host=self.host, port=self.port, user=self.user , passwd=self.passwd , db=self.db)
cursor = conn.cursor(cursorclass=mdb.cursors.DictCursor) ##获得操作游标
cursor.execute('SELECT %s FROM %s' % (self.table_fieldname, self.tablename)) ##执行选择语句
r = cursor.fetchall() ##查询所有的记录,以字典的方式返回
print(r)
for i in r:
# print(i[self.table_fieldname])
phoneNumber = i[self.table_fieldname]
flag = self.judgePhoneNumber(phoneNumber) ##判断指定的手机号是否正确
# print(flag)
if flag == True:
L_phone.append(phoneNumber) ##如果电话号码正确,则被加入到列表中
else:
continue
if str(self.phone_Number) in L_phone: ##匹配电话号码是否存在
print("%s is exist" % self.phone_Number) ##存在则输出
else:
print("%s is not exist" % self.phone_Number)
conn.commit()
except Exception as e:
print(e)
traceback.print_exc()#发生错误时回滚
conn.rollback()
finally:
cursor.close() ##关闭游标
conn.close() ##关闭数据库连接
def judgePhoneNumber(self, phoneNumber): ##判断指定的手机号是否正确
if len(str(phoneNumber))!=11: #首先判断是否是11位
# print("phone number is not enough 11")
flag=False
else:
if not str(phoneNumber).isdigit(): ##是否由数字组成
flag=False
else:
phone_rule=re.compile('^1[358]\d{9}$||^17[0-8]\d{8}$|^145\d{8}$|^149\d{8}$|^147\d{8}$|^166\d{8}$|^191\d{8}$|^198\d{8}$|^199\d{8}$') #通过正则表达式匹配电话号码
res_list=re.findall(phone_rule,str(phoneNumber))
if res_list:
flag=True
else:
flag=False
return flag
# if __name__ == '__main__':
'''
host ip地址
port 端口号
user 数据库用户
passwd 数据库用户密码
db 数据库名
tablename 表名
table_fieldname 表字段名
'''
number = Select_Number('localhost', 3306, 'root', ' ', 'test', 'testuser', 'phone', '18333608826')
# number = Select_Number()
number.connect_Database()