Quella espressione dice solo che la stringa deve iniziare con un carattere alfanumerico... non mette restrizioni sui successivi.

function ctr_name(obj){
var expr = /^[a-zA-Z0-9]*$/;

// Controllo che ci siano solo caratteri alfanumerici
if ( (!expr.test(obj.value)) && obj.value != ""){
alert("Sono ammesse solo lettere e numeri!");
obj.value = "";
}

Non ricordo la priorita' di esecuzione di ! e && , per sicurezza e poltronite ho aggiunto le parentesi