<?php

function validarCelular($celular)
{
    static $regex;

    if ($regex === null) {
        //Coloquei em um array para identificar melhor
        $ddds = implode('|', array(
            11, 12, 13, 14, 15, 16, 17, 18, 19,
            21, 22, 24, 27, 28,
            91, 92, 93, 94, 95,
            81, 82, 83, 84, 85, 86, 87,
            31, 32, 33, 34, 35, 37, 38,
            71, 73, 74, 75, 77, 79,
            61, 62, 63, 64, 65, 66, 67, 68, 69,
            49, 51, 53, 54, 55
        ));

        //Gera a regex
        $regex = '#^(\((' . $ddds . ')\) 9|\((?!' . $ddds . ')\d{2}\) )[6789]\d{3}-\d{4}$#';
    }

    return preg_match($regex, $celular) > 0;
}

var_dump( validarCelular('(21) 96000-0000') );
var_dump( validarCelular('(21) 6000-0000') );
var_dump( validarCelular('(10) 6000-0000') );
var_dump( validarCelular('(10) 96000-0000') );