Попробуйте:
$('#theInput').blur(function()
{
$(this).val(function(i, v)
{
var v = v.replace(/[^\d]/g, '').match(/.{1,4}/g);
return v ? v.join('-') : '';
});
});
Попробуйте здесь: http://jsfiddle.net/hnbx4/
Вот объяснение:
Первое:
v.replace(/[^\d]/g, '')
мы фильтруем входные данные, чтобы они содержали только цифры.Затем:
.match(/.{1,4}/g);
мы разбиваем строку чисел на 4-значные куски.Тогда:
return v ? v.join('-') : '';
если массив, мы объединяем массив, вставляя тире между кусками.В противном случае мы просто устанавливаем пустую строку.