Вот как я бы реализовал правило проверки:
$('.myinput').val().match(/^[+-]?\$\d(?:\.\d\d)?$/)
Проблема с вашим шаблоном в том, что он не фиксированной длины, поэтому его сложно кодировать в маске, и вы можете встретить людей, которые дают $ 3,5, а это не то, что вам нужно. Я думаю, что при таком вашем паттерне будет трудно не прибегнуть к сопоставлению регулярных выражений.
Вы можете рассмотреть вопрос о том, чтобы сделать центовую часть обязательной, и в этом случае ваш шаблон почти в порядке, просто добавьте 0,99 в конце, и он должен это сделать (хотя как пользователь, я бы не хотел начинать свою валюту с пробела характер ...).