Array einer beginnenden Zahlenfolge

Hallo,
ich habe ein einem Script ein Array mit gesperrten Rufnummern (z.B. 0036, 089, …).
Sollte die gesperrte Rufnummer im Array gefunden werden soll das Script abgebrochen werden. Das funktioniert auch soweit, das Problem ist nur das in meinem Script exakt die gleiche Rufnummer übermittelt werden muss um als gesperrt erkannt zu werden.
Ich möchte aber das die übermittelte Rufnummer diese als gesperrt erkennt sobald die Zahlenfolge mit meinem Array beginnt, z.B. soll die gesperrte Rufnummer 089 auch die Rufnummer 08955 oder 08946 als gesperrt erkennen. Gibt es hierfür eine Funktion?

Mein bisheriger Codeschnipsel:

<?php
$textq = GetValueString(16102);

$anrufsperre = array("0036", "00386", "02283822567", "030", "03027586177", "07541223", "085621315", "089");
    if (in_array ($textq, $anrufsperre)){
        return false;
    }

Moin @yansoph,

dieser Befehl PHP: substr - Manual würde dir schon mal weiterhelfen :wink: In deinem Bseipsiel würde es allerdings dazu führen, dass alle Berliner Anrufe (030) gesperrt werden :roll_eyes:

Gruß
Hans

An der Stelle solltest du vielleicht eher mit Regex arbeiten. Oder zumindest schauen ob der gesuchte String an der Stelle 0 beginnt

Habe mich mal mit substr versucht:

<?php
$textq = GetValueString(16102);

$sperre1 = "0036";
$sperre2 = "00386";
$sperre3 = "02283822567";
$sperre4 = "030";
$sperre5 = "03027586177";
$sperre6 = "07541223";
$sperre7 = "085621315";
$sperre8 = "089";

$anrufsperre = array(substr($sperre1, 0, 4));
if (in_array ($textq, $anrufsperre)){
    return false;
}

So wird aber nur die Nummer 0036 gesperrt nicht aber z.B. 00368 oder 00369999

Moin,

ich denke, dass dir nichts anderes übrig bleibt als dein Anfangsarray sukzessive zu erweitern.

Weder strpos, substr oder das komplexe Regex werden dabei zielführend sein. Und 030 und 089 würden alle Anrufe aus Berlin und München blockieren.

Ausländische Nummern wie 0034 könnte man allerdings mit den genannten Befehlen gut verhindern.

Du könntest auch mit einem Texteditor eine Datei mit den Nummern anlegen und diese dann einlesen und verarbeiten. Das hätte den Vortei, dass du nicht IPS aufrufen müsstest um eine neue Nummer einzutragen.

Gruß
Hans

so würden die Funktionen funktionieren, nur weiß ich nicht ob dieses auch einfacher/kürzer möglich wäre…

<?php
$textq = GetValueString(16102);

// gesperrte Rufnummern sollen keine Meldung senden
$sperre1 = "0036";
$sperre2 = "00386";
$sperre3 = "02283822567";
$sperre4 = "030";
$sperre5 = "03027586177";
$sperre6 = "07541223";
$sperre7 = "085621315";
$sperre8 = "089";

if ((substr($textq, 0, 4)) == $sperre1){
    return false;
}elseif
    ((substr($textq, 0, 5)) == $sperre2){
    return false;
}elseif
    ((substr($textq, 0, 11)) == $sperre3){
    return false;
}elseif
    ((substr($textq, 0, 3)) == $sperre4){
    return false;
}elseif
    ((substr($textq, 0, 11)) == $sperre5){
    return false;
}elseif
    ((substr($textq, 0, 8)) == $sperre6){
    return false;
}elseif
    ((substr($textq, 0, 9)) == $sperre7){
    return false;
}elseif
    ((substr($textq, 0, 3)) == $sperre8){
    return false;
}

Das Array der sperren durchwandern und jeweils die Ankommende Nummer mit dem Wert des Array über strpos prüfen auf ===0.
Damit weißt du dann dass der Wert des Array mit dem Anfang (also ab Stelle 0) deiner Rufnummer übereinstimmt.
Michael

1 „Gefällt mir“

Wenn ich es mit strpos versuche…

<?php
$textq = GetValueString(16102);

// gesperrte Rufnummern sollen keine Meldung senden
$sperre1 = "0036";
$sperre2 = "00386";
$sperre3 = "02283822567";
$sperre4 = "030";
$sperre5 = "03027586177";
$sperre6 = "07541223";
$sperre7 = "085621315";
$sperre8 = "089";

$anrufsperre = array($sperre1, $sperre2, $sperre3, $sperre4, $sperre5, $sperre6, $sperre7, $sperre8);
$pos  = strpos($textq, $anrufsperre);
if ($pos  === 0){
    return false;
}

Warning: strpos(): needle is not a string or an integer in /mnt/data/symcon/scripts/17782.ips.php on line 15

erkennt er die array ($anrufsperre) nicht als String, was fehlt hier?

Das foreach… Du musst schon das Array durchwandern und jeden wert einzeln prüfen.
Michael

Vielleicht so

<?php

$textq = "030";

$anrufsperre = array("0036", "00386", "02283822567", "030", "03027586177", "07541223", "085621315", "089");

foreach($anrufsperre as $sperre)
    {
    echo "\n". $textq . " - " . $sperre;    

    if ( strncmp($sperre, $textq, strlen($textq)) === 0)
        {
        return false;    
        }
    }

Vielen Dank Nall-chan, hatte ich übersehen :thinking:
Um die Sperren nicht manuell im Script verwalten zu müssen könnte ich mir eine Hilfsvariable im FritzBox-Modul vorstellen in welcher automatisch alle „aktivierten“ Sperren gelistet sind…wird es eine solche Variable zukünftig im Modul geben?
Oder gibt es andere Möglichkeiten?

Die sperren der Fritzbox sind schon Bestandteil vom Modul (Telefonie Instanz) und werden als schaltbare Statusvariable abgebildet.
Einträge in Telefonbuch können glaube ich noch nicht per Script/Aktion hinzugefügt werden.
Michael

Das ist richtig, aber wie kann ich unterhalb der Instanz FritzBox Telefonie prüfen ob Sperren vorhanden sind und diese aktiviert wurden und dessen Werte automatisch in das Array laden??
Für ein Beispiel wäre ich dir dankbar :smirk:

So gar nicht, außer du fängst an dort den Ident der Variablen zu analysieren. Das werde ich aber nicht dokumentieren und behalte mir auch Änderungen vor.

Verstehe auch nicht was du da überhaupt mit erreichen willst, weil die Sperre an sich erledigt die Fritzbox.

Es gibt aber Instanz-Funktionen um z.b. die Telefonbücher auszulesen und das Sperre Telefonbuch sollte auch gehen.
Ebenso gibt es Instanz-Funktionen um die Sperren und deren Zustände auszulesen (sonst könnte das Modul ja schlecht Variablen dazu anlegen).
Die Dokumentation dazu fehlt noch, musst du also selber ausprobieren.
Michael

Ebenso gibt es Instanz-Funktionen um die Sperren und deren Zustände auszulesen (sonst könnte das Modul ja schlecht Variablen dazu anlegen).
Die Dokumentation dazu fehlt noch, musst du also selber ausprobieren.

Du meinst

FB_GetCallBarringList

SetValueString(45155, $_IPS['FB_GetCallBarringList']);

Notice: Undefined index: FB_GetCallBarringList in /mnt/data/symcon/scripts/54098.ips.php on line 2

Die gesperrten Nummern in eine Variable zu schreiben ist leider so noch nicht zielführend.