ThinkSNS +は、文字表示の長さを計算する方法であります

+ ThinkSNS何である
  (TSと呼ばれる)ThinkSNS、社会システムのための完全に統合されたプラットフォーム、国内外の中小企業や起業家のためのソーシャル・ソフトウェアの開発と技術的ソリューションの提供、最新バージョンのThinkSNS +、ThinkSNS V4、ThinkSNS [プロフィール] 。

表示長:今日は、人々の頭痛の多くはよい話について。

需要は2つだけの英語の単語を占めショーの文字は、中国語や他の言語の長さを示したものです。次のように:

ab
哈
?

手紙の上記二列、文字、絵文字。あなたは同じであるディスプレイの幅のために、あります。このようなプロセスのためのいくつかの魅力的なデザインも必要です。

たとえば、私たちの需要も需要の混合行することができ12非シングルバイト文字または24シングルバイト文字までのユーザー名の需要があり、私たちは、このような検証のバックエンド処理を記述する必要があります。

需要ルールは/ ^ [A-ZA-Z-である\ x7f- \ XFF] [A-ZA-Z0-9 / \ x7f- \ XFF] * $

共通部分ということを確認するため、独自の検証ルールを使用するように選択することができるようにするためにThinkSNS +で。のは、バーの下に算出したアイデアの実現を見てみましょう!

まず第一に、さえmb_strlenは、長さと混合し、正確なマルチバイト文字とシングルバイト文字を取得することができない、3バイト文字、半角記号ので、英語の1バイト配列、を占め、オンラインことわざがあります:

`(mb_strlen($str) + strleng($str)) / 2`

この方法は、0.5から1へのマルチバイト課金計算の単一バイトを得ることができます。しかし、中国は、例えば、2万の漢字が続いている以上6万4文字があり、場合で、絵文字は4バイトです。単に正確に算出することはできません。

幸い、私は奇妙なことは、無意識のうちにこの機能をstr_word_countた英語以外の言葉に加えて、外を算出し、漢字などの記号である絵文字は同じ理由で、カウント数に応じています。

この発見の後、それが容易になります。[-AA-Z0-9_]雑草で私たちをユーザ名、個人を数えていないことは、我々はそれをしたい長さを確認することですか?

だから、最初に我々は使用します。

preg_match_all('/[a-zA-Z0-9_]/', $value, $single);
$single = count($single[0]) / 2;

シングルバイト文字表示の独立した長さとして計算し、次に:

$double = str_word_count(preg_replace('([a-zA-Z0-9_])', '', $value));

マルチバイト長として計算し、最終的に:

$length = $single + $double;

表示長を取得するには、達成し、最終的に検証ルールにカプセル化:

Validator::extend('display_length', function ($attribute, $value, array $parameters) {
                        if (empty($parameters)) {
                throw new \InvalidArgumentException('Parameters must be passed');
            }

            $min = 0;
            if (count($parameters) === 1) {
                list($max) = $parameters;
            } elseif (count($parameters) >= 2) {
                list($min, $max) = $parameters;
            }

            if (! isset($max) || $max < $min) {
                throw new \InvalidArgumentException('The parameters passed are incorrect');
            }

            // 计算单字节.
            preg_match_all('/[a-zA-Z0-9_]/', $value, $single);
            $single = count($single[0]) / 2;

            // 多子节长度.
            $double = str_word_count(preg_replace('([a-zA-Z0-9_])', '', $value));

                        // 得出最终计算字符的长度
            $length = $single + $double;

            return $length >= $min && $length <= $max;
});

コードは最適化されていない、プロトタイプのコードで、その後、私たちは次のように従ってください。

$rules = [
    'inputKey' => 'display_length:5', // 表示 0 - 5 显示长度
    ‘inputkey2’ => 'display_length:4,12' // 表示显示长度为 4 - 12
];

今では、このニーズに適したソリューションです。

我々は非常に満足している、ThinkSNS +製品開発技術ソリューションのLaravelに基づいて、あなたに共有し、友人のよう願っています国に支援オープンソース製品の少しを与えることができます。

過去の研究日記レビュー:

「ThinkSNS + Laravelのマスターブランチ日記[研究開発]に基づいて。」

「選択の前にThinkSNS + R&Dは、(WebPACKの/ヴュー)はピット開発日記日記[2]を階段」

「ThinkSNS + [3]のコンポーネントベース開発Laravelルート日記。」

「どのようにLaravelの設定は、Webサイトの背景調査の日記[4]を設定することができます。」

オープンソースコードリポジトリ:

GitHubの:https://github.com/zhiyicx/thinksns-plus(、ダイナミックな毎日の発展を懸念星をクリックしてください。)

オープンソースは、収入を得るために、私たちのチームは多くの労力を作った、簡単ではありません。カラムは技術的な詳細ThinkSNS +開発プロセスを共有するために継続された後Laravelは、みんなの前に表示された作品に基づきます。

おすすめ

転載: blog.51cto.com/14231620/2412310