After playing with this for about an hour, I don't see any way to do this in one fell swoop. You're really trying to do three things: find blocks of text surrounded by tags, split up the attributes within the tags and validate the attribute values, and then, finally, apply them to the text. This:
(?:\[font\s*)(.*?)\](.*?)(?:\[\/font\])
...will find every such block. It won't capture the beginning and end tags (because of the ?:), but will capture the text (the boldfaced group). You should then split the captured attribute list on \s*, then split each name/value pair on =. Throw out the values you don't like. If you try to use the regex to validate values, you'll likely lose valid values for some other attribute within the same tag, or lose valid attributes because some other attribute name is wrong (or not backward-compatible). I just wouldn't use a regex to match, parse, and validate all at once.
"Some day, and that day may never come, I will call upon you to do a service for me." — Don Vito Corleone