質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

2945閲覧

Golangでの正規表現

kos_chan

総合スコア3

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2022/01/10 14:15

Go言語でパスワードの正規表現を書きたいのですが、肯定先読みをサポートしていないためエラーになってしまいます。
実現したい内容は 半角英小文字大文字数字をそれぞれ1種類以上含む8文字以上の正規表現 です。
エラーになっている正規表現は以下の形です。

^(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,}$

どのように書き換えれば実現できるかご教授願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単一の正規表現を使うのではではなく、段階的にチェックしても良いかと思います。

go

1package main 2 3import ( 4 "regexp" 5 "testing" 6) 7 8func MatchPasswordString(password string) bool { 9 // must be equal or longer than 8 characters 10 if len(password) < 8 { 11 return false 12 } 13 // must contain at least each one uppercase, lowercase and number 14 reg := []*regexp.Regexp{ 15 regexp.MustCompile(`[a-z]`), regexp.MustCompile(`[A-Z]`), 16 regexp.MustCompile(`\d`), 17 } 18 for _, r := range reg { 19 if r.FindString(password) == "" { 20 return false 21 } 22 } 23 return true 24} 25 26func TestMatchPasswordString(t *testing.T) { 27 cases := []struct { 28 input string 29 want bool 30 }{ 31 {"Ftk3bg1aCW", true}, 32 {"1aZ", false}, // less than 8 characters 33 {"zJmsZJiKeS", false}, // uppercase and lowercase letters 34 {"v0x51aip1t", false}, // lowercase letters and numbers 35 {"WZO257AV6Z", false}, // uppercase letters and numbers 36 {"_%+1&a!*Z@", true}, // other characters 37 } 38 39 for i, p := range cases { 40 got := MatchPasswordString(p.input) 41 if got != p.want { 42 t.Errorf("unexpected ExcelColumn result, case=%d, input=%s, got=%v, want=%v", 43 i+1, p.input, got, p.want) 44 } 45 } 46}

sh

1$ go test match_password_string_test.go 2ok command-line-arguments 0.001s

投稿2022/01/10 18:18

melian

総合スコア19865

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kos_chan

2022/01/11 12:52

実現することができました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問