使用正则表达式验证表单数据

时间:2011-08-30 12:09:49

标签: php regex forms validation

我是最新的,很高兴来到Stackoverflow。我很长一段时间都在关注这个网站。

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

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

1)控制该字段是否为空。

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

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

问题是:为什么如果我把这个字符“w /”,脚本不能控制?它似乎是字符串旁路控制?


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

现在,谈论我的问题。我检查了问题是否仅在我离线工作时(我使用EasyPhp 5.3.6.1)。否则,在线测试的regEx就可以了。

这是我用来获取上述内容的代码:

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

         echo "Error";

    }

如您所见,此代码匹配:

  • 以字母开头(并完成)的字符串;
  • 只有0或1个空格的字符串(对于有两个名字的人,即:Anna Maria);

...对吧?!

(如果我错了,请纠正我)

感谢所有人!

3 个答案:

答案 0 :(得分:2)

我对要求的阅读是

  • 只能提供字母(上部或下部)。
  • 必须提供某些内容(即非零长度的字符串)。
  • 最大长度。

下面的代码以非常简单的方式对此进行检查,并且只是发现它发现的任何错误;你可能想要在检测到错误时做一些更有用的事情。

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

答案 1 :(得分:2)

你也可以试试这个:

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

以上内容仅与@genesis'相匹配,但仅在$ subject介于1到12个字符之间时匹配。正则表达式也不区分大小写。

答案 2 :(得分:0)

工作正常。

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

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