【问题标题】:Warning: preg_match() [function.preg-match]: No ending delimiter '/' found警告:preg_match() [function.preg-match]:没有找到结束分隔符'/'
【发布时间】:2012-03-30 04:41:55
【问题描述】:

当这个函数被调用时,它给出了消息 警告:preg_match() [function.preg-match]: 没有结束分隔符 '/'

这是检查字母数字输入的功能

function CheckAlphanumeric($element,$minlength,$maxlength)
 { if (!preg_match ("/[^A-Za-z\s\0-9 - @ .]//", $element) && strlen($element)>=$minlength && strlen($element) <=$maxlength) { return TRUE; }
 else { return FALSE;}

 }

您对此警告有何意见?

【问题讨论】:

  • 您是否尝试删除两个结束 / 字符之一?
  • @SurrealDreams 我做了,但仍然收到警告消息

标签: php error-handling preg-match design-patterns validation


【解决方案1】:

您会想要转义最后一个正斜杠(或删除它,不确定它是否应该在那个正则表达式中?)。此外,您在 0 之前有一个反斜杠,这也没有任何意义。

# escape it if it's supposed to be in there.
/[^A-Za-z\s0-9 - @ .]\//

# use a different character as a delimiter
%[^A-Za-z\s0-9 - @ .]/%

# remove it if it's a typo!
/[^A-Za-z\s0-9 - @ .]/

另外,您知道您可以使用[:alnum:] 快捷方式吗? (src)

# matches alpha numeric, "-", "@", and "."
/[[:alnum:]-@.]/

希望是最终编辑:

我建议你也先看看你的函数,这有点令人困惑。您基本上想检查三个条件,1)它是否通过正则表达式,2)它是否是最小长度,以及 3)它是否是最大长度。由于所有这三个都返回布尔值(或正确评估为布尔值的东西),您可以将函数简化如下:

function CheckAlphanumeric($element,$minlength,$maxlength) {
  // returns TRUE if it matches all conditions, FALSE if one fails.
  return preg_match("/[[:alnum:]-@. ]/", $element) && strlen($element) >= $minlength && strlen($element) <= $maxlength;
}

【讨论】:

  • 我想说如果你需要转义分隔符,你应该考虑改变它:~[^A-Za-z\s\0-9 - @ .]/~
  • @meze 谢谢你我试过了,它变成了:没有结束分隔符 '~' found i
【解决方案2】:

嗯,对于您所拥有的内容,这是一个奇怪的错误消息,但您的正则表达式末尾有两个 /。你应该只有一个:"/[^A-Za-z\s\0-9 - @ .]/" 如果你想匹配文字 / 当你使用它作为你的分隔符,你需要用 \ 转义它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2011-03-20
    • 2011-08-21
    相关资源
    最近更新 更多