【问题标题】:Validating form data using regex使用正则表达式验证表单数据
【发布时间】:2011-11-06 18:13:48
【问题描述】:

我是最新的,很高兴来到 Stackoverflow。我关注这个网站很久了。

我有一个输入/文本字段。 (例如“插入您的姓名”)

脚本在用户发送数据时启动以下控件:

1) 控制字段是否为空。

2) 控制字段是否超过允许的最大字符数。

3) 控制字段是否包含错误匹配的 preg_match 正则表达式。 (例如,它包含数字而不仅仅是字母 - 没有符号和重音 -)。

问题是:为什么如果我把这个字符“w/”,脚本不会控制?而且好像是字符串绕过控件?


大家好,如果我迟到了答案,对不起(以及发布的非代码^^)。

现在,谈谈我的问题。我检查了问题仅在我离线工作时才出现(我使用 EasyPhp 5.3.6.1)。否则在线测试的正则表达式是可以的。

这是我用来获取我上面所说的内容的代码:

    if (!preg_match('/^[a-zA-Z]+[ ]?[a-zA-Z]+$/', $name)) {

         echo "Error";

    }

如你所见,这段代码匹配:

  • 仅以字母开头(和结尾)的字符串;
  • 只有 0 或 1 个空格的字符串(适用于有两个名字的人,即:Anna Maria);

...对吗?!

(如有错误请指正)

谢谢大家!

【问题讨论】:

  • 欢迎来到 stackoverflow - 你能发布你的代码吗?没有它就很难回答你的问题。
  • 欢迎来到 SO。如果您编辑问题以添加您的 php 代码,包括正则表达式和失败的示例,那么我们可以提供帮助。否则,你的问题不够清楚。

标签: php regex forms validation


【解决方案1】:

我对要求的解读是

  • 只能提供字母(大写或小写)。
  • 必须提供某些内容(即非零长度字符串)。
  • 有一个最大长度。

下面的代码以一种非常简单的方式检查这一点,并且只是回显它发现的任何错误;当您检测到错误时,您可能想要做一些更有用的事情。

<?php

$max    = 10;
$string = 'w/';

// Check only letters; the regex searches for anything that isn't a plain letter
if (preg_match('/[^a-zA-Z]/', $string)){
    echo 'only letters are allowed';
} 

// Check a value is provided
$len = strlen($string);
if ($len == 0) {
    echo 'you must provide a value';
}

// Check the string is long to long
if ($len > $max) {
   echo 'the value cannot be longer than ' . $max;
}

【讨论】:

    【解决方案2】:

    你也可以试试这个:

    if (preg_match('/^[a-z0-9]{1,12}/im', $subject)) {
        \\ match
    }
    

    上面的内容只会匹配类似于@genesis' 的帖子,但只会匹配 $subject 长度介于 1 - 12 个字符之间的内容。正则表达式也不区分大小写。

    【讨论】:

    • 它匹配1234567890AB /%--...
    【解决方案3】:

    它工作正常。

    <?php
    $string = '\with';
    if (preg_match('~[^0-9a-z]~i', $string)){
        echo "only a-Z0-9 is allowed"; //true
    }
    

    http://sandbox.phpcode.eu/g/18535/3

    您必须确保您没有将用户输入放入您的正则表达式中,因为这意味着您可能会检查出一些错误。

    【讨论】:

    • No it does not。您有一个锚点,指示 开始0-9a-z输入的其余部分可以是任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    相关资源
    最近更新 更多