2016-04-27 15 views
1

Ich habe einen <form>, wo der Benutzer kann nur Worte vom Eingang entfernen, so etwas wie:Validate Text, fehlen Begriffe

<input type="text" value="hello world 進撃進撃 lorem ipsum" name="so"> 

Wenn ich das Formular verarbeiten, ich, dass der Benutzer nur sicherstellen will, die Worte entfernt und nicht hinzu, ihre eigenen Bedingungen usw.

Also, wenn die Form der Verarbeitung, ich habe den ursprünglichen Wert:

$original_value = 'hello world 進撃進撃 lorem ipsum'; 

Und der Benutzer bearbeitet Wert:

$edited_value = $_POST['so']; 

Wie validiere ich dies?

Was ich versucht habe bisher

  • ich den Wert in Worte und dann cross check, wenn die Wörter in $edited_value existiert in $original_valueexpode() kann.

  • Ich kann prüfen, ob alle Zeichen Benutzer in $edited_value in $original_value existieren, aber das ist eine schwache Validierung.

Antwort

2

ich mit explode, strlen und in_array gehen würde, hier ein Beispiel

<?php 
    $error = false; 
    $original_value = 'hello world 進撃進撃 lorem ipsum'; 
    $originalLenght = strlen($original_value); // get the string length 
    $parts = explode(" ", $original_value); 


    $newValue = "hello world newword"; 
    $newLenght = strlen($newValue); // get the new string length 
    $newParts = explode(" ", $newValue); 

    //Check if the new sentence contains new words using in_array 
    foreach($newParts as $newWord){ 
    if (!in_array($newWord, $parts)) { 
     $error = true; 
    } 
    } 

    //Check if the size of the new sentence is > to the original or error is true 
    if($newLenght > $originalLenght OR $error){ 
     echo "Invalid Sentence"; 
    }else{ 
     echo "Valid Sentence"; 
    } 

Ideone Demo

+0

Das ist sehr interessant! Gibt es eine Möglichkeit, es etwas weniger empfindlich zu machen, indem Sie weiße Leerzeichen und Punkte ignorieren, damit der folgende Wert gültig wird: '$ newValue =" Hallo Welt. ";' –

+0

Sie ersetzen weiße Räume und Punkte durch etwas Einzigartiges, wie ' | ', bevor es explodiert. –

+1

Können Sie bitte demonstrieren, wie? Wenn ich die Leerzeichen durch '|' ersetze, wird der Satz nicht in Worte explodieren, weil keine weißen Felder übrig sind, wenn Sie meine Drift bekommen. –

0

Ich würde halten die Tags (Wörter) in einem Array:

$tags = [ 
    'tag1' => 1, 
    'tag2' => 1, 
    // ... 
]; 

Der Benutzer implode(' ', $tags) im input akzeptiert.

Dann wird die Validierung wie folgt aussehen könnte:

$valid = true; 
foreach (preg_split('/\s+/', $_POST['so']) as $tag) { 
    if (!isset($tags[$tag])) { 
    $valid = false; 
    break; 
    } 
}