Python:使用正则表达式进行数据验证

时间:2013-03-22 22:34:08

标签: python regex

我正在尝试使用Python regular expression来验证变量的值。

验证规则如下:

  • 该值可以包含a-zA-Z0-9*(无blank,无-,无{{}中的任何一个1}})
  • 值为,的数字为start或字母(0-9)(a-z, A-Z)
  • 值为*的数字为end或字母(0-9)(a-z, A-Z)
  • 在中间,该值可以包含数字*或字母(0-9)(a-z, A-Z)
  • 不得允许任何其他值

目前我正在使用以下代码片段进行验证:

*

我觉得应该有更好的方法来做到这一点。我正在寻找以下内容:

import re
data = "asdsaq2323-asds"
if re.compile("[a-zA-Z0-9*]+").match(data).group() == data:
    print "match"
else:
    print "no match"

是否存在一个这样的内置函数?

3 个答案:

答案 0 :(得分:4)

在正则表达式中,元字符^$表示“字符串开头”和“字符串结束”(分别);所以,不是看匹配什么,而是将它与整个字符串进行比较,你可以简单地要求正则表达式匹配整个字符串开头:

import re
data = "asdsaq2323-asds"
if re.compile("^[a-zA-Z0-9*]+$").match(data):
    print "match"
else:
    print "no match"

此外,由于你只使用了一次正则表达式 - 你编译它并立即使用它 - 你可以使用方便方法re.match来处理它作为一个步骤:

import re
data = "asdsaq2323-asds"
if re.match("^[a-zA-Z0-9*]+$", data):
    print "match"
else:
    print "no match"

答案 1 :(得分:3)

要确保整个字符串与您的模式匹配,请在正则表达式中使用字符串锚点的开头和结尾。例如:

regex = re.compile(r'\A[a-zA-Z0-9*]+\Z')
if regex.match(data):
    print "match"
else:
    print "no match"

使这个功能:

def validate_func(regex, data):
    return data if regex.match(data) else None

示例:

>>> regex = re.compile(r'\A[a-zA-Z0-9*]+\Z')
>>> validate_func(regex, 'asdsaq2323-asds')
>>> validate_func(regex, 'asdsaq2323asds')
'asdsaq2323asds'

作为旁注,我更倾向于\A\Z而不是^$进行验证,这样^和{{1}的含义}可以根据使用的标志进行更改,$将匹配字符串末尾的换行符之前。

答案 2 :(得分:2)

我认为你正在寻找

re.match('^[a-zA-Z0-9*]+$',data) and data

额外的and data只是为了返回数据,但我不确定为什么需要这样做。检查re.match结果是否足以检查字符串是否有效。