Возможно, ^(?:\d*|na)$
будет лучше. Какой язык / движок? Также, пожалуйста, покажите ввод и, если возможно, фрагмент кода.
Также возможно, что вы не соответствуете "na", потому что после него есть новая строка. Цифры не будут затронуты, потому что вы не указали для них якорь $.
Таким образом, в зависимости от языка и способа получения ввода, может быть новая строка между «na» и концом строки, и $ не будет соответствовать ей, если вы не включите многострочное совпадение (или зачистить строку новой строки).