检查反斜杠是否在路径字符串中正确转义

时间:2017-02-15 17:18:22

标签: python string python-2.7 escaping

this question之后,我想知道下面的函数是否足够好用于检查没有意外序列反斜杠 - 字符已在路径中输入导致生成“特殊字符”。为了更清楚,\b是一个退格,\后跟一个数字会产生一些ascii字符代码。我想避免这种情况。还有像\d这样的序列没有特殊含义,显然在这种情况下\会自动转义。我并不担心。这是我的功能:

def checkPathString(dir):
    slash = False
    for c in repr(dir):
        if c == '\\':
            slash = not slash
        else:
            if slash:
                raise ValueError('Path contains unescaped \\ characters')

似乎正确检测到\b\后跟一个数字(因为内部表示变为\x 某事)。它还让我发现\f是一个特殊的序列,也被翻译成\x 某些

检测为坏字符串:

"C:\dummy\bar" #Because of "\b"
"C:\dummy\2000" #Because of "\" followed by a number

检测为良好的字符串:

"C:\dummy\\bar" #\d is escaped automatically because is not a special sequence
"C:\dummy\\2000"

1 个答案:

答案 0 :(得分:1)

您无法实现目标,例如,您无法防范定义ASCII字符的\x前缀,因为它们在输入时会被解释。

>>> "\x61"
'a'
>>> repr("\x61")
"'a'"

所以例如任何检测方法都会失败,给定一个名为x61abcde的子文件夹,以防输入字符串为“C:\ dummy \ x61abcde”

此外,对于\后跟数字的几种组合,检测将失败,例如你有这些直接的解释:\61 => 1\72 => :

作为旁注,关于你提出的方法,我只会检查任何字符是否在interval [32 .. 127](或[32 .. 255]如果你想支持重音)

def check_path_string(path):
    if all(31<ord(c)<127 for c in path):
        pass
    else:
        raise ValueError("path contains non-ascii characters")