正则表达式与特殊字符?

时间:2011-03-09 18:47:50

标签: php regex

我正在寻找一个可以包含/ \ . ' "

等特殊字符的正则表达式

简而言之,我想要一个可以匹配以下内容的正则表达式:

  • 可能包含小写
  • 可能包含大写
  • 可能包含数字
  • 可能包含空格
  • 可能包含/ \ . ' "

我正在创建一个php脚本来检查某个字符串是否具有上述内容,如验证检查。

5 个答案:

答案 0 :(得分:6)

您正在寻找的正则表达式是

^[a-z A-Z0-9\/\\.'"]+$

请记住,如果您使用的是PHP,则需要使用\来转义反斜杠和用于封装字符串的引号。

在使用preg_match的PHP中,它应如下所示:

preg_match("/^[a-z A-Z0-9\\/\\\\.'\"]+$/",$value);

这是查找您可能想要使用的正则表达式的好地方。 http://regexpal.com/

答案 1 :(得分:2)

您可以通过在特殊字符前附加\来逃避它们。

答案 2 :(得分:2)

试试这个:

preg_match("/[A-Za-z0-9\/\\.'\"]/", ...)

答案 3 :(得分:2)

NikoRoberts 100%正确。 我只会添加以下建议:创建PHP正则表达式模式字符串时,请始终使用:单引号。需要转义的字符数要少得多(即只有单引号和反斜杠本身需要转义(如果字符串的末尾出现反斜杠,则只需转义)。

处理反斜杠汤时,打印出(解释的)正则表达式字符串会很有帮助。这显示了正确呈现给正则表达式引擎的内容。

此外,“数字”可能有可选标志吗?是?这是我的解决方案(以经过测试的脚本的形式):

<?php // test.php 20110311_1400
    $data_good = 'abcdefghijklmnopqrstuvwxyzABCDE'.
        'FGHIJKLMNOPQRSTUVWXYZ0123456789+- /\\.\'"';
    $data_bad = 'abcABC012~!@##$%^&*()';

    $re = '%^[a-zA-Z0-9+\- /\\\\.\'"]*$%';
    echo($re ."\n");
    if (preg_match($re, $data_good)) {
        echo("CORRECT: Good data matches.\n");
    } else {
        echo("ERROR! Good data does NOT match.\n");
    }
    if (preg_match($re, $data_bad)) {
        echo("ERROR! Bad data matches.\n");
    } else {
        echo("CORRECT: Bad data does NOT match.\n");
    }
?>

答案 4 :(得分:1)

以下正则表达式将匹配符合您所述描述的单个字符:

[a-zA-Z0-9\ \\\/\.\'\"]

如果你的观点是要确保你的字符串中只使用了这个字符范围内的字符,那么你可以使用以下字母的否定:

[^a-zA-Z0-9\ \\\/\.\'\"]

在第二种情况下,你可以使用你的正则表达式来找到坏东西(你不想被包含在内),如果找不到任何东西,那么你的字符串模式必须是犹太教的,因为我是假设如果您发现一个字符不在适当的范围内,那么您的字符串无效。

所以把它放在PHP语法中:

$regex = "[^a-zA-Z0-9\ \\\/\.\'\"]"

if preg_match( $regex, ... ) {
    // handle the bad stuff
}

编辑1: 我完全忽略了反斜杠在php双引号字符串中特殊的事实,所以这里是对上述代码的修正:

$regex = "[^a-zA-Z0-9\\ \\\\\\/\\.\\'\\\"]"

如果这不起作用,那么有人不应该花太多时间来调试需要使用反斜杠转义的反斜杠数量,还有其他字符也需要转义....

相关问题