验证缺少术语的文本

时间:2016-04-27 12:57:19

标签: php validation

我有<form>,用户可以仅从输入中删除字样,例如:

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

当我处理表单时,我想确保用户只删除了这些字词,并且没有添加自己的字词等。

因此,在处理表单时,我有原始值:

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

用户编辑的值:

$edited_value = $_POST['so'];

如何验证?

到目前为止我尝试了什么

  • 我可以expode()将值转换为字词,然后交叉检查$edited_value中的$original_value中是否存在$edited_value中的字词。

  • 我可以检查$original_value中是否存在model.PurposeList = purposelist.Where(y => y.ID >= 4000 && y.ID <= 4050) .Select(x => new SelectListItem() { Text =x.PurPose1, Value=x.Id.ToString() }) .ToList(); 中的所有字符用户,但这是一个弱验证。

2 个答案:

答案 0 :(得分:2)

我选择explodestrlenin_array,这是一个例子

<?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

答案 1 :(得分:0)

我将标签(单词)保存在一个数组中:

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

用户接受implode(' ', $tags)中的input

然后验证可能如下所示:

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