Hay que notar que las expresiones regulares son un sub-lenguaje totalmente aparte con sus propias reglas y sintaxis, no pertenecen al foro de PHP sino al sub-foro de expresiones regulares.
Cabe destacar que la expresión
^[A-Z0-9]{20}$ espera exactamente 20 caracteres, entre letras y números.
Código PHP:
Ver original$regex = '/^[A-Z0-9]{20}$/';
$test = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
Es decir, el código de arriba jamás va a validar debido a que la cadena de prueba supera por mucho los 20 caracteres, así de simple.
Ahora, si la expresión debería contar "20 caracteres o más" debes cambiar el rango del grupo a
{20,} para que así resulte.