【问题标题】:applying a filter on a string in python在python中对字符串应用过滤器
【发布时间】:2011-02-23 10:40:06
【问题描述】:

我有一个用户输入他的用户名,我只希望通过有效的字符串,这意味着只有 [a-zA-Z0-9] 中的字符。我对 python 很陌生,不确定语法。

这是我想要的代码示例,即检查用户名并在非法字符时返回 false。:

def _checkInput(input):
     for char in input:
          if !(char in [a-zA-Z0-9]):
               return False
     return True

谢谢!

【问题讨论】:

    标签: python string input alphanumeric


    【解决方案1】:

    字符串中有一个方法叫做isalnum。它可以实现您想要实现的目标。

    In [7]: 'ab123fd'.isalnum()
    Out[7]: True
    
    In [8]: 'ab123fd **'.isalnum()
    Out[8]: False
    

    【讨论】:

      【解决方案2】:

      你需要isalnum:

      >>> name = raw_input('Enter your name: ')
      Enter your name: foo_bar
      >>> name.isalnum()
      False
      >>> name = raw_input('Enter your name: ')
      Enter your name: foobar
      >>> name.isalnum()
      True
      

      【讨论】:

        【解决方案3】:

        Python 字符串有很多有用的方法可以进行这种检查,例如:

        • str.isalnum()
        • str.isalpha()
        • str.isdigit()
        • str.islower()
        • str.istitle()
        • str.isupper()

        你需要的是str.isalnum(),如果字符串中的所有字符都是字母数字并且至少有一个字符,则返回true。

        >>> 'hello1'.isalnum()
        True
        >>> 'hello 1'.isalnum()
        False
        >>> 'hello!'.isalnum()
        False
        >>> ''.isalnum()
        False
        

        如上例所示,字母和数字被视为字母数字,但空格和标点符号不是。

        另请注意,与纯数学相反,空字符串不被视为字母数字。但是在大多数情况下,这实际上是您需要的,当然也是您需要的,因为长度为零的用户名没有多大意义。

        【讨论】:

          【解决方案4】:

          这非常接近于 Python:

          def _checkInput(input):
               for c in input:
                    if not (c in string.ascii_letters or c in string.digits):
                         return False
               return True
          

          这也可以用正则表达式来解决,但上面的可能更清晰,更简单。

          【讨论】:

            【解决方案5】:

            您可以使用regular expressions 轻松检查输入字符串:

            >>> import re
            >>> s = getinput()
            >>> if not re.match(r'^[a-zA-Z0-9]+$', s)
            ...     print "bad input"
            

            如果空字符串也是有效输入,则使用* 而不是+

            按照其他答案的建议,使用 isalnum 也是一种不错的方法,但是使用正则表达式,您可以轻松调整检查,以防输入要求变得更加复杂。

            【讨论】:

              【解决方案6】:

              实现此目的的一种方法是使用 Python 的正则表达式模块。它是一个标准库。

              import re
              
              _pmatcher = re.compile(r'[0-9a-zA-Z]*$')
              def _checkInput(input):
                  return _pmatcher.match(input)
              

              字符串前面的 r 不是拼写错误,它是将字符串视为原始字符串,而不是输入转义字符。

              你可以参考这个Python 2.7 Documents(或者你选择的Python版本)

              【讨论】:

                【解决方案7】:

                您将来可能需要验证字符串的所有字符是否都存在于特定列表中。

                没有正则表达式,可能是这样的:

                ch = 'becdi30!&'
                
                okchars = 'abcdefghijk012345,;:!&-'
                
                print all(c in okchars for c in ch)
                

                结果

                True
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2018-03-14
                  • 2018-10-21
                  • 2014-07-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-01-05
                  • 1970-01-01
                  相关资源
                  最近更新 更多