Si j'ai une chaîne comme celle-ci:

TAX ID NO. 01.000.589.0.055.000 

Mon objectif est, je veux obtenir le chiffre entier après tax phrase, qui est 010005890055000

Jusqu'ici j'écris comme ça

/(tax id no)\s*[^A-Za-z0-9]?\s*\K\d+/i

Mais ce n'est toujours pas vrai car parfois l'utilisateur a écrit comme ceci:

TAX ID. 01.000.589.0.055.000 or
TAX ID : 01.000.589.0.055.000 or
TAX ID 01.000.589.0.055.000 or
TAX: 01.000.589.0.055.000

Même l'utilisateur a écrit directement dans un chiffre entier préfet

TAX ID NO. 010005890055000

S'il vous plaît donnez votre avis

Voici toutes mes possibilités:

  1. Non formaté

    JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONÉSIE TAX ID NO. 010005890055000

  2. Formaté

    JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONÉSIE TAX ID NO. 01.000.589.0.055.000

  3. Avec une expression tax différente

    JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONÉSIE TAXE 010005890055000

    JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONÉSIE ID FISCAL 01.000.589.0.055.000

    JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONÉSIE ID FISCAL. 010005890055000

  4. Au début d'une phrase

    ID FISCAL. 010005890055000, JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONÉSIE

    ID FISCAL. 01.000.589.0.055.000, JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONÉSIE

Tellement merci ...

-1
Fadly Dzil 20 nov. 2018 à 09:21

4 réponses

Meilleure réponse

Il semble que votre seul mot-clé cohérent soit TAX, vous pouvez donc saisir des chiffres (avec des points et des tirets) après lui avec l'expression régulière ~TAX.*?\.? *?([\d\.-]+)~i, puis supprimer les non-chiffres (si vous le souhaitez). Voici un exemple de test:

$data = "JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID NO. 010005890055000
JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID NO. 01.000.589.0.055.000
JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX 010005890055000
JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID 01.000.589.0.055.000
JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID. 010005890055000
TAX ID. 010005890055000 , JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA
tax ID. 01.000.589.0.055.000 , JL
TAX ID. 01.000.589.0.055.000 , JL. CACING RT 007/008 CAKUNG, JAKARTA TIMUR 13910 INDONESIA
JL. CAKUNG CILINCING KP BARU RT 007/008 CAKUNG BARAT, CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID NO. 01.109.421.6-902.000";

foreach (explode("\n", $data) as $line) {
    preg_match("~TAX.*?\.? *?([\d\.-]+)~i", $line, $m);
    echo preg_replace("~\D~", "", $m[1]) . "\n";
}

Production:

010005890055000
010005890055000
010005890055000
010005890055000
010005890055000
010005890055000
010005890055000
010005890055000
011094216902000

Essayez!

1
ggorlen 20 nov. 2018 à 07:17

Vous pouvez utiliser ceci:

/(?:tax\s*(?:id\s*)?).*?(\d[\d\.]+)/i

Le premier groupe vérifie tax, id étant facultatif. Il saisit ensuite le premier chiffre et tous les chiffres et . et les regroupe sous $1

Regexr

1
Amit Joki 20 nov. 2018 à 06:30

Vous pouvez utiliser cette expression régulière, où à l'exception de la partie TAX, j'ai fait tout ce qui se situe entre la taxe et les nombres comme facultatif. Utilisez cette expression régulière et capturez le groupe1

/tax(?:.*?)\s+([\d.]+)/i

Démo

Une fois que vous obtenez une partie de chiffres et de points, supprimez tous les caractères de points.

Voici un exemple de code php,

$arr = ["TAX ID NO. 01.000.589.0.055.000","TAX ID. 01.000.589.0.055.000","TAX ID : 01.000.589.0.055.000","TAX ID 01.000.589.0.055.000","TAX: 01.000.589.0.055.000", "TAX ID NO. 010005890055000"];

foreach ($arr as &$value) {
    preg_match('/tax(?:.*?)\s+([\d.]+)/i', $value, $matches);
    echo $value . " --> " . preg_replace('/\./','',$matches[1]) . "\n";
}

Ceci imprime la sortie suivante,

TAX ID NO. 01.000.589.0.055.000 --> 010005890055000
TAX ID. 01.000.589.0.055.000 --> 010005890055000
TAX ID : 01.000.589.0.055.000 --> 010005890055000
TAX ID 01.000.589.0.055.000 --> 010005890055000
TAX: 01.000.589.0.055.000 --> 010005890055000
TAX ID NO. 010005890055000 --> 010005890055000
1
Pushpesh Kumar Rajwanshi 20 nov. 2018 à 06:59

Vous pouvez utiliser preg_replace pour supprimer tout sauf les nombres.

preg_replace('/[^\d]/', '', $str);

Voir la sortie: https://3v4l.org/Ne3fo


Pour répondre à la nouvelle exigence: utilisez substr et strpos pour supprimer la pièce jusqu'à «tax».

$arr = ["TAX ID. 01.000.589.0.055.000 or",
"TAX ID : 01.000.589.0.055.000 or",
"TAX ID 01.000.589.0.055.000 or",
"TAX: 01.000.589.0.055.000",
"ARU RT 007/008 CAKUNG BARAT, CAKUNG, JAKARTA TIMUR 13910 INDONESIA TAX ID NO. 010005890055000"];

foreach($arr as $str){
    echo preg_replace('/[^\d]/', '', substr($str, stripos($str, "tax"))) . "\n";
}

https://3v4l.org/btDAq

1
Andreas 20 nov. 2018 à 06:46