/**
* 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 "";
}
}