/** * Attempts to extract a possible number from the string passed in. This currently strips all * leading characters that cannot be used to start a phone number. Characters that can be used to * start a phone number are defined in the VALID_START_CHAR_PATTERN. If none of these characters * are found in the number passed in, an empty string is returned. This function also attempts to * strip off any alternative extensions or endings if two or more are present, such as in the case * of: (530) 583-6985 x302/x2303. The second extension here makes this actually two phone numbers, * (530) 583-6985 x302 and (530) 583-6985 x2303. We remove the second extension so that the first * number is parsed correctly. * * @param int $number the string that might contain a phone number * @return string the number, stripped of any non-phone-number prefix (such as "Tel:") or an empty * string if no character used to start phone numbers (such as + or any digit) is * found in the number */ public static function extractPossibleNumber($number) { $matches = array(); $match = preg_match('/' . self::$VALID_START_CHAR_PATTERN . '/ui', $number, $matches, PREG_OFFSET_CAPTURE); if ($match > 0) { $number = substr($number, $matches[0][1]); // Remove trailing non-alpha non-numerical characters. $trailingCharsMatcher = new Matcher(self::$UNWANTED_END_CHAR_PATTERN, $number); if ($trailingCharsMatcher->find() && $trailingCharsMatcher->start() > 0) { $number = substr($number, 0, $trailingCharsMatcher->start()); } // Check for extra numbers at the end. $match = preg_match('%' . self::$SECOND_NUMBER_START_PATTERN . '%', $number, $matches, PREG_OFFSET_CAPTURE); if ($match > 0) { $number = substr($number, 0, $matches[0][1]); } return $number; } else { return ""; } }