Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

i am having a small problem with my regex which i use to extract phone numbers from a strong

<?php
$output = "here 718-838-3586 there 1052202932 asdas dasdasd 800-308-4653 dasdasdasd 866-641-6949800-871-0999";
preg_match_all('/[0-9]{3}s*[-]?s*[0-9]{3}s*[-]?s*[0-9]{4}/',$output,$matches);
echo '<pre>';
print_r($matches[0]);
?>

output

Array
(
            [0] => 718-838-3586
            [1] => 1052202932
            [2] => 800-308-4653
            [3] => 866-641-6949
            [4] => 800-871-0999

)

this work fine but it returns 1052202932 as one of result which i don't need .
actually i don't know where is the missing part in my pattern .

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
1.0k views
Welcome To Ask or Share your Answers For Others

1 Answer

The ? after each [-] is making the - optional. If you want it to be required you can just remove the ? which will make it required. Also, [-] is equivalent to - so I got rid of the unnecessary character class:

preg_match_all('/[0-9]{3}s*-s*[0-9]{3}s*-s*[0-9]{4}/',$output,$matches);

You can also replace all of the [0-9] with d to shorten it a bit further:

preg_match_all('/d{3}s*-s*d{3}s*-s*d{4}/',$output,$matches);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share

548k questions

547k answers

4 comments

86.3k users

...