-2

I wish to validate a 10 digit phone number, and allow for up to four spaces in between each numeric segment, in CakePHP. How might I do this?

Examples of valid input:

  • 04 123 123 34
  • 0266 234 234
  • 0266123123
  • 02 66 55 12 12
Chris Jacob
  • 11,878
  • 7
  • 47
  • 42
  • I figured it would be ok to post a question and answer it myself as a reference for other (based on http://meta.stackexchange.com/questions/17845/etiquette-for-answering-your-own-question)... but the down votes keep flowing in :( – Chris Jacob May 14 '12 at 04:43

1 Answers1

0

This validation worked for me - hopefully this answer will help others. If you have improvements please post them.

'phone' => array(
    'phone-1' => array(
        'required'   => true,
        'allowEmpty' => false,
        'last'       => true,
        'rule'       => 'notEmpty',
        'message'    => 'This field cannot be left blank'
    ),
    'phone-2' => array(
        'last'       => true,
        'rule'       => array('minLength', 10),
        'message'    => 'This field has a minimum length of 10 characters'
    ),
    'phone-3' => array(
        'last'       => true,
        'rule'       => array('maxLength', 14),
        'message'    => 'This field has a maximum length of 14 characters'
    ),
    'phone-4' => array(
        'last'       => true,
        'rule'       => array('phone', '/^[0-9]( ?[0-9]){8} ?[0-9]$/'), 
        // start and end in a digit and require 8 digits inbetween (so total of 10 digits required).
        // allow a single space between any digit (so this is valid "0 1 2 3 4 5 6 7 8 9" ... 19 characters ... but our minLength and maxLength validation protects us from this)
        // minLength 10 means "0123456789" is the shortest valid input.
        // maxLength 14 means "01 23 45 67 89" is the most spaced we can be (i.e. max 4 spaces allowed... they could be anywhere in the string e.g. "12 123 123 1 1") 
        // http://en.wikipedia.org/wiki/Telephone_numbers_in_Australia
        'message'    => 'Please enter a valid 10 digit phone number (digits and spaces only)'
    )
),
Chris Jacob
  • 11,878
  • 7
  • 47
  • 42