2010-03-30 64 views
1

我希望能够使用提供的电子邮件地址或用户标识(整数)从数据库中提取用户。为此,我必须检测提供的字符串是整数还是电子邮件。寻找最快的方法来做到这一点。谢谢。在python中,确定字符串是电子邮件还是整数的最快方法是什么?

def __init__(self, data): 
    #populate class data 
    self._fetchInfo(data) 


def _fetchInfo(self, data): 
    #If an email 
     #SELECT ... WHERE email = 'data' 
    #or if a user_id 
     #SELECT ... WHERE id = 'data' 

    #Fill class attributes 
    self._id = row['id'] 
    self._email = row['id'] 
    ... 
+0

使用正则表达式http://docs.python.org/library/re.html#re-syntax – vittore 2010-03-30 03:17:07

回答

4

的正规途径在Python来处理,这是先试,后来请求原谅:

def _fetchInfo(self, data): 
    try: 
     data=int(data) 
     sql='SELECT ... WHERE id = %s' 
     args=[data] 
    except ValueError: 
     sql='SELECT ... WHERE email = %s' 
     args=[data] 
     # This might fail, in which case, data was neither a valid integer or email address 

这一策略也由绰号"It is Easier to Ask for Forgiveness than Permission"去。

+2

哈哈哈..这是如何尝试和catch应在所有学校教授 – Anurag 2010-03-30 03:23:38

+1

确保您验证在将任何字符串放入'SELECT'语句之前输入。 – 2010-03-30 09:22:46

+0

“Little Bobby Tables”:http://xkcd.com/327/ – 2010-03-30 11:44:41

2

可以使用isinstance功能:

if isinstance(data, int): 
    # it's an id 
else: 
    # it's a string 

虽然就个人而言,我只是有两个方法,fetchByIdfetchByEmail,使之清楚,它是如何工作。

+1

isinstance将不起作用,因为:“我必须检测提供的**字符串** ...” - 它将始终是一个实例str。 – detly 2010-03-30 04:14:39

+0

噢,是的,我现在看到了...在这种情况下,〜unutbu的答案仍然有效。 – 2010-03-30 04:26:02

2

你说这两个都是字符串,对吧?这也会起作用。

if data.isdigit(): 
    # it's an id 
else: 
    # it's not 
+0

如果整数可能为负数,则不起作用。 – dan04 2010-03-30 06:07:22

+2

@ dan04。 确实如此,但自动递增的db id通常不是负数。 – 2010-03-30 08:14:43

1
if '@' in data: 
    # email 
else: 
    # id 
相关问题