如何用javascript / php检查文本区域是否包含某个短语?

时间:2010-12-07 07:28:32

标签: php javascript validation contains

我正在尝试研究如何检查文本区域以查看它是否包含某个短语。

我相信我可以使用.indexOf?

我只有一个验证脚本来检查联系表单的内容。最近我收到了相当多的垃圾邮件。我注意到所有这些垃圾邮件都包含短语[url =我想,如果我可以添加一个小脚本来检查文本区域是否包含这样的短语,如果是,则停止发送邮件。

目前我有这个简单的javascript片段来检查文本区域是否为空白:

if (message.val()=='') {  
        message.addClass('highlight');
        message.focus();
        return false;  
    } else message.removeClass('highlight');

添加内容以检查消息字段是否包含[url =

的任何好方法

我也有类似的php验证脚本:

if (!$message) $errors[count($errors)] = 'Please click back and enter your message.';

任何想法如何添加类似的验证脚本来检查消息是否包含[url =在php中?

任何帮助将不胜感激! :O)

3 个答案:

答案 0 :(得分:3)

您不太可能通过检查客户端textarea的内容来阻止垃圾邮件: - 垃圾邮件发送者很可能直接POST到您的服务器端脚本,因此您需要在那里进行过滤。检查特定模式只会在模式更改之前有效,然后您必须更新脚本 这个问题的一个常见解决方案是使用一次性表单令牌 当您提供表单时,您会生成一个随机字符串,并将该标记放在表单中的隐藏字段中。您还可以在会话或数据库中将令牌存储在服务器上。提交表单后,您将匹配存储和提交的令牌。通过这种方式,您可以更加确定表单本身已填写并提交,并且您没有从机器人接收数据 为了提高安全性,您只能允许每个令牌仅使用一次,以防止多次提交。

<强>更新 一个非常简单的单页示例

<?php
session_start();

/**
 * Process the form if we have a token that we recognise
 * otherwise just present the form again, you probably want to handle this a bit better 
 */
if( isset( $_POST['token'] ) && isset( $_SESSION['token'] ) 
    && $_POST['token'] === $_SESSION['token'] ) {

    // no more submissions using this token
    unset( $_SESSION['token'] );

    $name    = clean( $_POST['name'] );
    $comment = clean( $_POST['comment'] );

    // process the input and redirect to a confirmation
    // just echoing data for example
    echo "$name said $comment";
    die();
} else {
    $token = uniqid();
    $_SESSION['token'] = $token;
}

/**
 * Stub function that cleans user input
 * @param String $str
 */
function clean( $str ) {
    return $str;
}
?>
<html>
  <head>
    <title>Form token example</title>
  </head>
  <body>
      <form method="post">
          <label>
               Name<br/>
               <input type="text" name="name"/>
          </label>
          <br/>
          <label>
              Comment<br/>
              <textarea name="comment"></textarea>
          </label>
          <br/>
          <label>
              <input type="submit"/>
          </label>
          <br/>
          <br/>
          The token field would normally be hidden, it's displayed here so that the user can change it for testing<br/>
          <input type="text" name="token" value="<?php echo $token ?>"/><br/>
      </form>
  </body>
</html>

答案 1 :(得分:2)

查看javascript search methodjavascript match method。我更喜欢搜索,如果你只关心它是否存在然后你做这样的事情。

var stringToSearch = "stackoverflow";

if (stringToSearch.search("over") >= 0){
    //exists
}

顺便说一句,你的问题没有做对。我不知道php所以我无法帮助你

答案 2 :(得分:-1)

message.val().match('your phrase here')