【问题标题】:PHP validation for matching multiple lines using preg_match()使用 preg_match() 匹配多行的 PHP 验证
【发布时间】:2015-05-07 10:06:53
【问题描述】:

我有以下代码 sn-p 我想匹配用户提供的输入以匹配正则表达式中指定的任何输入。一切正常,但 \n 部分,我想允许多行。这尤其行不通。

if(preg_match("/[^A-Za-z0-9., \/-\n]/", $addr))
    {
    echo "Invalid user input  ";
    exit;
    }

我收到消息

Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 17 in ......

朋友告诉我这里如何允许多行。

【问题讨论】:

    标签: regex preg-match


    【解决方案1】:

    你应该使用

    [^A-Za-z0-9., \/\n-]
    

    -\n 之前创建了一个无效范围(- 文本范围乱序 问题)。

    如果你想允许多行,只需删除\n

    [^A-Za-z0-9., \/-]
    

    【讨论】:

    • 删除 \n 不会达到我的目的。正如我提到的没有 \n 它工作正常。但我也需要允许多行。
    • 恐怕这不合逻辑:你不能吃一个鸡蛋就拥有它。当您将\n 放入范围时,用户将无法键入它。如果您不能输入换行符,m 选项将毫无用处。
    【解决方案2】:

    您可以在您的正则表达式中使用m(多行)修饰符..

    preg_match("/[^A-Za-z0-9., \/-]/m", $addr)
                                    ^
    

    【讨论】:

    • 那我还能保留 \n 部分吗?因为我认为它会允许多行。
    • 你可以..但它不会有用..你也可以将``(空格)更改为\s
    猜你喜欢
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多