the 'w' switch is arguably more suitable since it returns the matching nick, generally leading to a satisfied if condition. with 's', everything after the search term is returned; when you have one nick per line it will return $null which will effectively falsify the condition (that's why a noop $read(...) | if ($readn) combination is often seen). * ? and & are typically not allowed in nicknames, but you're quite right that in general it is important to make that distinction :P
the same could be said about 'n' and nicknames not typically being allowed a % or $ prefix, but it changes nothing to include it here and is something a lot of people often omit.
Edit: ah, forgive me, i didn't see past the first $read(file,w,$nick) check :P i believe you want $v1 in place of $1- there