ウェブサイトから入力された文字列が英数字で、おそらくアンダースコアを含んでいるかどうかを確認するために探しています。 マイコード:Python:英数字と一致する正規表現が機能していませんか?
if re.match('[a-zA-Z0-9_]',playerName):
# do stuff
何らかの理由で、これは例えば狂気の文字と一致:NIG○▲☆★◇◆
私は何かがあり、通常のAZと0-9と_マッチングをしたいです私はここで行方不明ですか?
ウェブサイトから入力された文字列が英数字で、おそらくアンダースコアを含んでいるかどうかを確認するために探しています。 マイコード:Python:英数字と一致する正規表現が機能していませんか?
if re.match('[a-zA-Z0-9_]',playerName):
# do stuff
何らかの理由で、これは例えば狂気の文字と一致:NIG○▲☆★◇◆
私は何かがあり、通常のAZと0-9と_マッチングをしたいです私はここで行方不明ですか?
Pythonは英数字を照合するための特別なシーケンス\w
を持っており、LOCALE
とUNICODE
フラグが指定されていないとき下線:代わりにこれを試してみてください。つまり、あなたのパターン英数字で、おそらくアンダースコアが含まれている場合
pattern = '^\w+$'
あなたの正規表現は1文字にしか一致しません。
if re.match('^[a-zA-Z0-9_]+$',playerName):
、と...チェックを変更することができます。
これは文字通り、1つのアンダースコアしか許されないのですか? (プレイヤーの名前には不合理ではなく、特に隣接するアンダースコアは他のプレイヤーが読むのが難しいかもしれません。) "a_b_c"は一致しないといけませんか?
その場合:
if playerName and re.match("^[a-zA-Z0-9]*_?[a-zA-Z0-9]*$", playerName):
正規表現を簡素化する空の値、条件チェックの新しい最初の部分。
"_a"、 "a_"、 "_"のすべてが一致するので、アンダースコアの場所に制限はありません。先頭と末尾のアンダースコアの両方を防止したい場合は、次のように変更してください:
if re.match("^[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)?$", playerName):
// this regex doesn't match an empty string, so that check is unneeded
LOCALEまたはUNICODE AREを指定するとどうなりますか? – interstar
チェックしませんでしたが、指定されたロケールの英数字と一致する必要があります。 – Rozuur