PHPで単純な文字列分割を行うために他にどのようなアプローチが必要なのでしょうか。興味深い値の2つが使用されたコードとユーザーのテキストメッセージであるSMSゲートウェイからの応答を受け取ります。PHPのSMSゲートウェイの分割を分割
コードのようなものであり得る:ユーザメッセージが最良の場合のシナリオは、例えばであるべきであるFreetrip
(小文字、大文字、小文字混合)
以下のようになります。Freetrip 12345
($ code "space" XXXXX)
各Xは1〜5の数字でなければなりません。他の値/文字はエラーを返します。したがって正規表現は次のように単純化されます:chars = 5ここで各桁> = 1および< = 5。
最後に保存する必要があるのは、5桁の値のそれぞれです。
私の最も簡単なアプローチは、メッセージ文字列全体を小文字にし、メッセージ文字列から小文字のコード(スペースも含む)を引きます。それは私が5つのユニークな変数に分割してDBに格納する5桁の数字で私を残すでしょう。
ここで難しいのは、上で説明した最善のケースのシナリオを達成するのが難しいということです。 SMSを入力するのは面倒な作業であり、入力エラーは簡単に発生します。次のようなエラーが発生する可能性があります。
- 数字が多すぎます。
- 数字以外の文字。
- XXXXXの組み合わせ以降の文字数が増えました。
- おそらく他のいくつかのケース。
送信者に返信できる個別のエラーメッセージを返す必要があります。
感謝すべてのショートコード。コードが正確に一致しない限り、SMSゲートウェイからメッセージを受信しないので、2番目のものは必要ありません。 XXXXXの後に送信者によって文字が間違って書き込まれた場合、最初の式が有効になりますか? –
いいえこの場合、このregex: '/^freetrip\s+([1-5]{5}).*/i'を使用することができます。私は最初に大文字小文字を区別しない単語freetripを意味します(^アンカーから文字列開始まで)、1つ以上のスペース文字(\ s +)、1から5までの正確な5文字([1-5 {5}])任意の文字(。*) "。 – Jet
もう一度見ていた。この解決策は、XXXXXの数字以外の文字はまだカバーしません。なぜエンドユーザがそれらを使用しないのですか?前に偽の数字を置き換えるのはとても簡単です。私。 $ sms = str_replace( 'O'、 '0'、$ sms); // O文字をゼロにします。書面ですべてのケースを数字で似て置き換えてください。 IMHOユーザーに馬鹿馬鹿しく伝えるよりもはるかに優れています - 「もう一度書き、注意してください」 – Jet