Il problema è che non gli dici che tutta la stringa deve contenere lettere e numeri, ma solo che "devono esserci lettere e/o numeri all'interno della stringa", se scrivi invece così
if(preg_match("/^[a-zA-Z0-9]$/", $valore_cercato))
gli stai dicedo che devono esserci lettere e/o numeri dall'inizio (^) alla fine ($) e così si comporta come vorresti tu.