【问题标题】:Check POST with preg_match [duplicate]使用 preg_match 检查 POST [重复]
【发布时间】:2012-10-29 02:33:36
【问题描述】:

可能重复:
Regular expression to limit number of characters to 10

我将 POST 检索到标准表单,我需要测试两件事:

  • 该值必须为 40 个字符
  • 值只能包含字母和数字

我认为使用 preg_match 可以做到这一点,但我不知道如何。

【问题讨论】:

  • 你试过用谷歌搜索“php 表单验证”

标签: php forms preg-match


【解决方案1】:

在全局 $_POST 中,您拥有关于 http 请求的所有发布数据。

然后:

$myvar = $_POST['your_posted_variable_here'];

$result = preg_match('/^([\w\d]){40}$/i', $myvar);

如果您发布的数据仅包含字母和数字且长度为 40 个字符,$result 将为 true,否则为 false。

【讨论】:

    【解决方案2】:

    PHP 提供了一个检查字母数字字符 ctype_alnumstrlen 的函数来检查字符串的长度,因此您可以使用这两个函数来验证它

    $yourInput=$_POST['yourInput'];
    if(ctype_alnum($yourInput) && strlen($strlen)==40)
    {
        //...
    }
    

    【讨论】:

    • 这种方法比使用正则表达式更简单,但性能更低。
    • @slash28cu, LESS PERFORMANCE 如?
    • @slash28cu:你有实际的基准和结果来支持你的论点吗?
    • @Sheik Heera 。我知道每个问题都有多种解决方案,如果有人不知道如何编写这个非常简单的正则表达式可以使用这种方法,否则我认为正则表达式是一个非常优雅的解决方案,在这种情况下就像你的答案一样简单。跨度>
    • @SheikhHeera 当然。我也不是说你错了,我只是强调字符串操作函数和正则表达式之间的性能比较。但当然,我们都有不同的方法。
    【解决方案3】:

    您也可以先使用 strlen() 检查字符串的长度,然后如果满足所需的长度,则继续检查字母数字。

    但是将军的想法是对的……

    这是另一种方式:

    preg_match("/^[0-9a-zA-Z_]{40,}$/", $_POST["something"])
    

    这是字母数字,并检查至少 40 个字符,但会接受更多。逗号后面的缺失值表示它可以是等于或大于 40 的任何值。

    【讨论】:

      【解决方案4】:

      关于 preg_match 的信息

      http://php.net/manual/en/function.preg-match.php

      if (preg_match("@^[a-z0-9]{40}$@mis", $_POST['username'])) {
          print 'matched';
      }
      

      【讨论】:

      • 为什么要使用 ms 标志?它们重要吗?
      • @SalmanA m 确实很重要,否则它将匹配 any 行正好有 40 个字符的输入,所有字母数字
      • @SalmanA 实际上,m 与我声称的相反(道歉)。如果多行打开,^$ do 匹配换行符(此处不需要):regular-expressions.info/modifiers.html
      • 根据相同的文档,s = "dot 匹配所有",在这个正则表达式中没有效果。
      【解决方案5】:

      正好 40 个字符:

      ^[a-zA-Z0-9]{40}$

      至少 40 个字符:

      ^[a-zA-Z0-9]{40,}$

      【讨论】:

      • ^[a-zA-Z0-9]{40}[a-zA-Z0-9]*$ 这太荒谬了......你应该使用 ^[a-zA-Z0-9] {40,}$ DRY 原则仍然适用于正则表达式。
      • 你说得对,我忘了开放括号。
      • 当有这么多元字符等时很容易做到;)
      • 我想知道两者之间是否存在性能差异。显然它不会对 PHP 正则表达式的规模产生显着影响,但是分离出固定部分会改变什么吗?
      • 你是什么意思“分离出固定的”部分?一般来说,如果你可以摆脱不使用正则表达式,那就去做吧。其他字符串处理函数,如 substr strpos 等,比正则表达式快得多。
      猜你喜欢
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2015-02-23
      • 2010-11-25
      相关资源
      最近更新 更多