SwiftでのソーシャルメディアURLの検証

バックグラウンド
2022年のバレンタインデーに、TokopediaはすべてのTokopediaユーザーと一般の人々にアフィリエイトプログラムを導入しました。アフィリエイトになるには、ユーザーはURLを使用してソーシャルメディアアカウントを登録する必要があります。各ソーシャルメディアURLには異なるドメインとURLパスがあるため、アプリケーションはソーシャルメディアに従ってURLを検証する必要があります。
正規表現は多くの構文解析の問題を解決する最も簡単な方法の1つであることに同意しますが、このケースはソーシャルメディアごとにいくつかのルールがあるため複雑であり、将来的にカスタマイズするのは困難になります。一部のソーシャルメディアには、ユーザーページに複数のURLパスがあります。たとえば、YouTubeには次のようないくつかのパスがあります。
https://www.youtube.com/user/example
https://www.youtube.com/c/coldplay
https://www.youtube.com/channel/UC9zY...
SuperValidator

SuperValidatorは、オプションベースのバリデーターであり、TokopediaのiOSエンジニアが管理するオープンソースライブラリです。バリデーターは、ニーズに応じて検証をカスタマイズするためのオプションを提供します。詳細については、この記事をご覧ください。
URLバリデーター
URLの構造を見ると、URLのコンポーネントごとに個別の検証を作成できます。

SuperValidatorは、コンポーネントを次のようなパラメーターとして分割しました。
protocols: [String] = ["https", "http", "ftp"],
requireProtocol: Bool = false,
requireValidProtocol: Bool = true,
paths: [String] = [],
allowQueryComponents: Bool = true,
domainWhitelist: [String] = [],
domainBlacklist: [String] = [],
fqdn: FQDN = .init() // Fully Qualified Domain Name
http
またはなどの有効なプロトコルの文字列の配列https
。保存する場合https
は、のみ許可されますhttps
。
requireProtocol
trueに設定されている場合、URLにはプロトコルが必要です。
requireValidProtocol
trueに設定されている場合、URLプロトコルは、プロトコルオプションにリストされている有効なプロトコルの1つと同じである必要があります。
パス
URLパスの文字列の配列/shop/{shopID}
。
2種類fixed
ありvalue
ます。
/shop/{shopID}
allowQueryComponents
falseに設定すると、クエリコンポーネントとアンカーは許可されません。
domainWhitelist
ホワイトリストドメインの文字列の配列。正規表現も使用できます。
domainBlacklist
ブラックリストドメインの文字列の配列。正規表現も使用できます。
FQDN
Fully Qualified Domain Nameの略で、ドメインが正常に機能するかどうかを確認します。
基本的な使用法
関数を呼び出すだけisURL
で、有効なURLを示すブール値を返すことができます。
バリデーターをカスタマイズする場合は、前のセクションで説明したオプションパラメーターを次のように設定できます。
関数を使用validateURL
して、成功またはエラーの結果を返すこともできます。SuperValidatorが提供するエラータイプを使用して、エラーメッセージを生成できます。
ユースケース
ソーシャルメディアのユーザーURLを分類してみましょう。それらには異なるドメインとパスがあり、それらのいくつかには複数の有効なパスがあります。このようなケースは、他のURLでも発生する可能性があります。enum
すべてのソーシャルメディアのオプションを保存するためのを作成できます。
次に、SuperValidatorを使用isURL
または機能させることができます。validateURL
SuperValidator.shared.isURL(
"https://instagram.com/myuser",
options: SocialMediaURL.instagram.options
)
validateURL
エラーの理由を取得してユーザーに提供するために使用できます。
その他のテストケースについては、このリンクを参照してください。
その他のバリデーター
URLの他に、SuperValidatorがすでにカバーしているいくつかのバリデーターがあります。
FQDN
完全修飾ドメイン名の検証に役立ちます。(ウィキペディア)
Eメール
ローカルパーツの長さ制限、ホワイトリスト、ブラックリストドメインなどのオプションを使用して、電子メールの検証を支援します。
電話番号
国際、北米、および拡張プロビジョニングプロトコル形式で電話番号を検証し、国コードまたは国のプレフィックスを検証するのに役立ちます。
今後の計画
- より多くの検証者
- UITextFieldでバインドする
- RxSwiftでバインドする
寄稿者を呼ぶ!SuperValidatorはオープンソースであり、皆様からのご意見をお待ちしております。あなたの経験は、SuperValidatorを使用する他の人に利益をもたらします。それをさらに良くしましょう!
https://github.com/tokopedia/ios-supervalidator
クレジット
開発を手伝ってくれたクリストファー・テディに感謝します。スーパーマンチームとこれを実現するのを助けたすべての開発者に称賛を送ります。
いつものように、Tokopediaにオープニングがあります。
私たちはインドネシアのテクノロジー企業であり、テクノロジーを通じて商取引を民主化し、誰もがより多くのことを達成できるよう支援することを使命としています。
Tokopediaで私たちと一緒にあなたの夢の仕事を見つけてください!
https://www.tokopedia.com/careers/