OK, well, there are two places it can be changed (the "settings" page and the profile), as well as registration, if you've set it to show up there. But I think you could handle any case by using hook userdata_presave. At that point you can check the value and set an error if it's invalid (or do anything else you want, of course). So basically something like this:
Code:
if ($this->setfields["fieldX"]) // field X has been set, new value in $this->userfield["fieldX"]
{
if ($this->userfield["fieldX"] is bad)
{
$this->error('errorphrase');
}
}
Of course you'd replace X with the id of your field, and errorphrase with the varname of an actual phrase (that you'd need to create). Also note that that plugin is executed inside a function, so if you need global variables you have to use "global". If you want to see what's going on, look at includes/class_dm_user.php, around line 1865, and maybe ajax.php, the 'saveuserfield' section that starts around line 814 to see how the datamanager is used to update profile fields.