Чушь конечно получилась, ну и фиг с ним
<input type="text" onkeyup="handler( this )" oninput="handler( this )" onblur="handler( this )" />
<script>
var re = /(?:([\d]{1,}?))??(?:([\d]{1,3}?))??(?:([\d]{1,3}?))??(?:([\d]{2}))??([\d]{2})$/;
function handler( elem ) {
elem.value = elem.value.replace( /[^0-9]/g, '' ).replace( re, function( all, a, b, c, d, e ){
return ( a ? "+ " + a + " " : "" ) + ( b ? b + " " : "" ) + ( c ? c + "-" : "" ) + ( d ? d + "-" : "" ) + e;
});
}
</script>