Python: Data validation using regular expression

python, regex

Solution

In a regex, the metacharacters `^` and `$` mean "start-of-string" and "end-of-string" (respectively); so, rather than seeing what matches, and comparing it to the whole string, you can simply require that the regex match the whole string to begin with:

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

In addition, since you're only using the regex once — you compile it and immediately use it — you can use the convenience method `re.match` to handle that as a single step:

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

Problem

I am trying to use `Python regular expression` to validate the value of a variable. The validation rules are as follows: - The value can contain any of `a-z`, `A-Z`, `0-9` and `*` (no `blank`, no `-`, no `,`) - The value can `start` with a number `(0-9)` or alphabet `(a-z, A-Z)` or `*` - The value can `end` with a number `(0-9)` or alphabet `(a-z, A-Z)` or `*` - In the middle, the value can contain a number `(0-9)` or alphabet `(a-z, A-Z)` or `*` - Any other values must not be allowed Currently I am using the following snippet of code to do the validation: ``` import re data = "asdsaq2323-asds" if re.compile("[a-zA-Z0-9*]+").match(data).group() == data: print "match" else: print "no match" ``` I feel there should be a better way of doing the above. I am looking for something like the following: ``` validate_func(pattern, data) /* returns data if the data passes the validation rules */ /* return None if the data does not passes the validation rules */ /* should not return part of the data which matches the validation rules */ ``` Does one such build-in function exist?

Original source