正規表現とPOSIX文字クラスを使用してRでパスワードを検証しようとしています。私は公平な量の正規表現を知っていますが、POSIXの部分は知っていません。私は、正規表現の質問に加えて、余分な12のSOの質問と回答、例えばthisとthatのような質問をするときにSOのリソースを探しました。パスワードのルールは以下のとおりです。正規表現とPOSIX文字クラスでRでパスワードを検証する
- ひとつの大文字
- ひとつの小文字
- 一つ以上の特殊文字(ASCIIの句読点)
- 文字8〜32 ASCII可視および空白文字only
コメントアウトされているコードのように、いくつかのコードバリエーションを試しました。私は下位レベルで正規表現を構築し始め、すべての要件を含むはずの正規表現に向かって作業を進めました。
ValidatePassword <- function(stringChar) {
# validPW <- "([[:lower:]]+[[:upper:]]+){8,32}"
# validPW <- "[[:lower:]]+[[:upper:]]+"
# validPW <- "^(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]])[[:print:]]{8,32}$"
# validPW <- "^(?:[[:lower:]])(?:[[:upper:]])(?:[[:punct:]])[[:print:]]{8,32}$"
# validPW <- "^(?:.*[[:lower:]])(?:.*[[:upper:]])(?:.*[[:punct:]])[[:print:]]{8,32}$"
# validPW <- "^([[:lower:]]+|[[:upper:]]+|[[:punct:]]+)[[:print:]]{8,32}$"
# validPW <- "^(?=.*[a-z])(?=.*[A-Z])(?=.*[[:punct:]])[[:print:]]{8,32}$"
# validPW <- "^([[:lower:][:upper:][:punct:]])[[:print:]]{8,32}"
validPW <- "^([[:lower:]]+|[[:upper:]]+|[[:punct:]]+)[[:print:]]{8,32}$"
return(length(grep(validPW, stringChar, value = TRUE)))
}
ifelse(ValidatePassword("#Password"), "valid", "not valid") # valid
ifelse(ValidatePassword("_PASSWORD"), "valid", "not valid") # not valid
ifelse(ValidatePassword("Password"), "valid", "not valid") # not valid
ifelse(ValidatePassword("password"), "valid", "not valid") # not valid
ifelse(ValidatePassword("passwor"), "valid", "not valid") # not valid
ifelse(ValidatePassword("pAsswords"), "valid", "not valid") # not valid
ifelse(ValidatePassword("Pa&sword"), "valid", "not valid") # valid
ifelse(ValidatePassword("Pa&s word"), "valid", "not valid") # valid
結果が「有効」であっても、コードが正常に動作しないことがわかりました。誰かが援助を提供できますか? ty
この答えは、長さテストといくつかのテストを渡します。あなたは少し説明したり、どこかに説明することができますか?また、(?x)は何をしますか? –
フリースペースモードでは正規表現内の空白が許されます。 – hwnd
私は興味があり、 '[[〜:]]'に '[[:print:]]'と再コード化してしまいました。コードを壊し、無効なパスワード "パスワード"を覗き込めます。 –