Craft Commerce: make address phone telephone field required without JavaScript
The way to do address validation with Commerce in gneral is using a plugin and listening to the onBeforeSaveAddress event.

Set up a listener with something like this:



    craft()-&gt;on('commerce_addresses.onBeforeSaveAddress',
        [
            craft()-&gt;businessLogic_logic,
            'onBeforeSaveAddressHandler'
        ]
    ); 


And here's an example of a function that does some validation:

public function onBeforeSaveAddressHandler($event){

    $address = $event-&gt;params['address'];

    if(!$address-&gt;firstName){
        $address-&gt;addError('firstName','First name must not be empty');
        $event-&gt;performAction = false;
    }
    if(!$address-&gt;lastName){
        $address-&gt;addError('lastName','Last name must not be empty');
        $event-&gt;performAction = false;
    }
    if(!$address-&gt;phone){
        $address-&gt;addError('phone','Phone number must not be empty');
        $event-&gt;performAction = false;
    }
    if(!$address-&gt;address1){
        $address-&gt;addError('address1','Street Address line 1 must not be empty');
        $event-&gt;performAction = false;
    }
    if(!$address-&gt;city){
        $address-&gt;addError('city','Suburb must not be empty');
        $event-&gt;performAction = false;
    }
    if(!$address-&gt;zipCode){
        $address-&gt;addError('zipCode','Postcode must not be empty');
        $event-&gt;performAction = false;
    }     
    if(!$address-&gt;countryId){
        $address-&gt;addError('countryId','Country ID must not be empty');
        $event-&gt;performAction = false;
    }          
}