2016-08-12 3 views
1

preg_match() funktioniert nicht in +(91) 111 11111Php preg_match Code für entsprechen die Telefonnummer

Der Code ist:

$number = +91 111 11111; 

if (preg_match('/^\s*(?:\+?(\d{1,3}))?[(]\+[)]?([-. (]*(\d{3})[-.)]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$/', $number)) { 
    echo "True"; 
} 

Es funktioniert. Aber die Arbeit nicht in +91 (111) 11111

+0

Sind Sie versuchen, Lex es? Scheint so, als ob du sagst, dass die '$ Nummer' keine Zeichenkette sein sollte und deshalb hast du' \ s * 'als Start (?) – Chay22

Antwort

0

Vielleicht möchten Sie Ihre regex oder versuchen, etwas zu überdenken:

<?php 

    if (preg_match('#(^[\+\d][\d]{1,2})?(\()?([\d\s]*)?(\))?([-. (]*(\d{3})[-.)]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$#', $number)) { 
     echo "True"; 
    } 

UPDATE: Veränderte das Muster

<?php 

    // MATCHES: "+91 (111) 11111" OR "+91 111 11111" OR "91 (101) 23454" 
    // OR "+(91) (101) 23454" 
    // BUT NOT "1234500000000000000000000" OR "+121(121)38778" 
    $rx  = '#(^[\+\d](\()?[\d]{1,2})*(\))?(\s)(\()?([\d\s]*?)(\))?(\s)([\d\s]*?)$#'; 
    if (preg_match($rx, $number)) { 
     //echo "True"; 
    } 
+0

Es funktioniert in + (91) 111 11111. Aber es funktioniert auch in 123450000000000000000000000 Dies ist keine Telefonnummer. Ich möchte überprüfen, ob es sich um eine Telefonnummer handelt oder nicht. –

+0

@faziltm Vielleicht könnten Sie die Regex ändern in: ' \t $ rx = '# (^ [\ + \ d] [\ d] {1,2}) * (\ s) (\()? ([\ D \ s] *?) (\))? (\ s) ([\ d \ s] *?) $ # '; ' – Poiz