【问题标题】:preg_match error handling not working [closed]preg_match 错误处理不起作用[关闭]
【发布时间】:2013-10-23 08:59:59
【问题描述】:

我的 php 错误处理似乎无法正常工作,我不知道我找了几个小时是有原因的,只是无法解决问题。我的 html 链接正确并且 php 表单运行。此外,“电话”的错误处理工作得很好,因此我的 preg_match 一定有问题,因为这是非工作错误之间唯一常见的事情?我知道这可能会很简单,我已经看过了,但我已经尽可能多地看了。 #### 注意:我已经准备好尝试其他类型的字符串和文字,并从 if(!preg_match($string_exp,!first_name) 等更改了我的代码,但它仍然不起作用。非常感谢任何帮助。表格应该处理这些错误并输出错误消息,但它没有。

    $string_exp = "/^[A-Za-z .'-]+$/";
  if(preg_match($string_exp,$first_name) == 0) {
    $error_message .= 'The First Name you entered does not appear to be valid.<br />';
  } 

  if(preg_match($string_exp,$last_name) == 0) {
    $error_message .= 'The Last Name you entered does not appear to be valid.<br />';
  }
     $food_expected = "0";
  if(preg_match($food_expected,$formFood) == 0) { 
     $error_message .= 'Please select a Food.'; 
} 

  if(strlen($telephone) > 11) {
    died($error_message); }
  if(strlen($telephone) < 11 ) {
    died($error_message);
  }

【问题讨论】:

  • 您已经转储了 100 多行代码,但您既没有解释它是如何工作的,也没有提供示例输入来重现问题。如果您在编写正则表达式时确实遇到问题,我很确定您可以编辑问题并将所有代码替换为 2 行 sn-p。
  • 如果您的用户输入了一个非英文名称(例如Álvaro),您可以在$error_message 中写入一些内容。那应该如何中止表单处理?

标签: php error-handling


【解决方案1】:

如果您阅读 preg_match() here 的 PHP 手册页,它有以下内容:

警告 此函数可能返回布尔值 FALSE,但也可能返回计算结果为 FALSE 的非布尔值。请阅读有关布尔值的部分以获取更多信息。使用 === 运算符测试此函数的返回值。

我建议您首先使用 === 运算符测试 preg_match 的返回值是否为 false:

if (preg_match($string_exp,$first_name) === false)

找出你的正则表达式是否有问题。

无论如何,不​​要在这里使用== 运算符。

话虽如此,在您的问题的未编辑版本中,如果电话号码长度为 11 个字符,则即使 preg_match() 返回 0,died() 函数也永远不会被 $error_message 调用。

【讨论】:

  • 非常感谢,这真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 2011-08-04
  • 2018-10-07
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
相关资源
最近更新 更多