A resposta "aceita" a esta pergunta é incorreta e míope.
É incorreto porque corresponderá a strings como 0001
, que não é um ano válido.
É míope porque não corresponderá a nenhum valor acima de 9999. Já esquecemos as lições do Y2K ? Em vez disso, use a expressão regular:
^[1-9]\d{3,}$
Se você precisar corresponder anos no passado, além de anos no futuro, poderá usar esta expressão regular para corresponder a qualquer número inteiro positivo:
^[1-9]\d*$
Mesmo que você não espere datas do passado, você pode querer usar esta expressão regular de qualquer maneira, apenas no caso de alguém inventar uma máquina do tempo e quiser levar seu software de volta com eles.
Nota: Esta expressão regular corresponderá a todos os anos, incluindo aqueles anteriores ao ano 1, uma vez que eles são normalmente representados com uma designação BC em vez de um número inteiro negativo. Claro, essa convenção pode mudar nos próximos milênios, então sua melhor opção é combinar qualquer número inteiro - positivo ou negativo - com a seguinte expressão regular:
^-?[1-9]\d*$