Anthony:

*>As I mentioned earlier, replace BADWORDS.match(value) with 
BADWORDS.search(value).
*. Sorry I missed that, you made it perfectly clear...

*> add word boundaries r'\b' to the RE, 
>.. Though he said he explicitly did not want to do that.
*. Sorry I wasn't clear on that.... but the word boundary will be useful to 
me in future.

Thanks all
~Rob

I will return just a True, or False with this, then add a validator to the 
username for registration,
then do some testing, and post complete solution, moving code to the proper 
place, with conditional etc.

*Note*:
Google doesn't allow bad words for usernames,
but rather than lecture you on bad words, they just say
Username:* frig*you123 is already taken...

and you can keep trying, like
*    frig*you123vvzz.yeearbob
and Google will just tell you that name is taken,
which I don't think it is :)


*Here is my code, now working...
*

# this import is required in web2py
import base64, re

#let's assume:
#  username can't contain spaces, just a-z and periods

# 'frig' is a very bad word
# 'sadf' is a racial slur


# so even if a person's name as frig, or asdf in it
# we will not let them use that.

# asdf    - is a bad username
# asdfyou - is a bad username
# youasdf - is NOT a bad username, but IT SHOULD BE.
 
badlist = ['frig', 'asdf', 'etc']

BADWORDS = re.compile(r'|'.join(badlist))

class IS_BAD:
    def __init__(self,error_message='bad word is contained in username'):
        self.error_message = error_message
    def __call__(self,value):
        if BADWORDS.search(value):
            return (value,self.error_message)
        return (value, None)






-- 



Reply via email to