- ベストアンサー
名前の重複チェック
- データベースのようなものを作り、名前の重複チェックの方法について相談です。
- 現在の重複チェックでは完全合致しないものはヒットしないため、改善方法を考えています。
- 語句の一部が含まれればリスト表示し、無ければ登録ページに移動する方法について教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
どういう構成のデータベースなんですか? 何はともかく,アルゴリズムをしっかり考えること 一般論ですが, (1) 必ず正規化してから 名前(データを一意に特定できるフィールド)を登録すること 例えば, ``hoge'' ``HOGE'' ``ho ge'' が同じものであるのに,データベース内に 別々に登録されていたら無意味です. したがって,登録時に そのときに登録する対象データを 「一意」に確定できる工夫を講じないといけません. そのためには何らかの正規化を行いましょう. 例えば,上の例では 「小文字」「空白は削除」みたいな処理を行うことで すべて``hoge''になるので一意にできます. (2) 既存の登録データとの一致のチェック hoge が登録されているときに,Hoge が入力されたときは Hogeを「正規化」してチェックすればよいことになります. ということが考えられます. そういうのがもうできない場合は $name = "hoge" だったとして /h\s*o\s*g\s*e/i のような正規表現を生成させて それでマッチさせることです. >これを、例えばgoogleの検索のように「語句の一部が含まれれば」リスト表示し、無ければ登録ページに移動すると言う風にするにはどのようにしたらよいでしょうか? 真剣にやるならば全く異なるアプローチをしなければいけません. あれはぶっちゃけた話「全文検索」をしてる(*1)わけで 話はまったく異なります. 気軽に行うのであれば正規表現です 検索対象が「ぐー」であれば /ぐ[ \n]*ー/ のような正規表現を生成させてマッチさせるとか. ちなみに,与えられた文字列 "hoge"から 正規表現 /h\s*o\s*g\s*e/i なんかを生成させるには $a = join "\\s*", split(//,"hoge"); $b =qr/$a/i; これくらいでしょうか