2

ユーザー名を入力するユーザーがいて、有効な文字列のみ、つまり [a-zA-Z0-9] 内の文字のみを通過させたいと考えています。私はPythonにかなり慣れていないため、構文がわかりません。

これは、ユーザー名をチェックして、不正な文字に対して false を返すコードで必要なものの例です。

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

ありがとう!

4

7 に答える 7

5

文字列には というメソッドがありますisalnum。それはあなたが達成しようとしていることをします。

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

In [8]: 'ab123fd **'.isalnum()
Out[8]: False
于 2011-02-23T10:42:33.313 に答える
4

Python 文字列には、この種のチェックを行うための便利なメソッドが多数あります。たとえば、次のとおりです。

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

必要なのはstr.isalnum()、文字列内のすべての文字が英数字で、少なくとも 1 文字ある場合に true を返すことです。

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

上記の例が示すように、文字と数字は英数字と見なされますが、スペースと句読点はそうではありません。

また、数学的に純粋な場合とは異なり、空の文字列は英数字とは見なされないことに注意してください。ただし、ほとんどの場合、これは実際に必要なものであり、実際に必要なものです。長さゼロのユーザー名はあまり意味がありません.

于 2011-02-23T11:02:26.200 に答える
4

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
于 2011-02-23T10:43:46.183 に答える
0

これを実現する 1 つの方法は、Python の正規表現モジュールを使用することです。標準ライブラリです。

import re

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

文字列の前にある r はタイプミスではなく、エスケープ文字を入力するのではなく、文字列を raw として扱うためのものです。

このPython 2.7 ドキュメント(または選択したバージョンの Python) を参照できます。

于 2011-02-23T11:01:24.393 に答える
0

将来、文字列のすべての文字が特定のリストに存在することを確認する必要があるかもしれません。

正規表現がなければ、次のようになります。

ch = 'becdi30!&'

okchars = 'abcdefghijk012345,;:!&-'

print all(c in okchars for c in ch)

結果

True
于 2011-02-23T12:20:42.873 に答える
0

それはPythonに非常に近いです:

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

これは正規表現でも解決できますが、おそらく上記の方が明確で複雑ではありません。

于 2011-02-23T10:43:43.500 に答える
0

正規表現を使用して、入力文字列を簡単に確認できます。

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

空の文字列も有効な入力である場合は*代わりに使用します。+

他の回答で示唆されているように、を使用isalnumすることも良いアプローチですが、正規表現を使用すると、入力の要件がより複雑になった場合にチェックを簡単に調整できます。

于 2011-02-23T10:45:16.153 に答える