- vừa được xem lúc

PHP thuần: một số string helper hữu dụng

0 0 18

Người đăng: Nguyễn Thế Mạnh

Theo Viblo Asia

Trong quá trình làm việc với string, ắt hẳn các bạn các bạn sẽ gặp không ít vấn đề khi sử dụng các ký tự unicode. các hàm dưới dây sẽ giúp bạn.

Đầu tiên, tạo 1 class Str, nơi chứa các helper

Các helper sẽ được gọi thông qua class này. các method sẽ được khai báo là một public static method.

<?php class Str
{ public static function __callStatic($name, $arguments) { if (function_exists("mb_$name")) { return call_user_func_array("mb_$name", $arguments); } if (function_exists($name)) { return call_user_func_array($name, $arguments); } }
}

Khi một static method chưa được định nghĩa được gọi, hàm __callStatic sẽ kiểm tra xem có tồn tại hàm mb + method hay không, nếu có có thì return về hàm đó. nếu không thì kiểm tra tồn tại hàm và gọi hàm đó.

lấy độ dài của chuỗi

public static function length($value, $multibyte = true)
{ return $multibyte ? mb_strlen($value) : strlen($value);
}

VD:

echo Str::length('abc'); // 3
echo Str::length('気をつけてね。'); // 7
echo Str::length('気をつけてね。', false); // 21

Xoá khoảng trắng phía trước chuỗi

public static function ltrim($value, $fullsize = true)
{ if ($fullsize) { $value = preg_replace('/^[\s]+/u', '', $value); } return ltrim($value);
}

Hàm sẽ loại bỏ các ký tự khoảng trắng fullwidth( ) phía trước chuỗi, sau đó sử dụng hàm trim của php để loại bỏ các ký tự \n\r\t\v\x00 phía trước chuỗi

Xoá khoảng trắng phía sau chuỗi

Tương tự ltrim, hàm rtrim sẽ xoá các khoảng trắng kể cả fullwidth phía sau chuỗi.

public static function rtrim($value, $fullsize = true)
{ if ($fullsize) { $value = preg_replace('/[\s]+$/u', '', $value); } return rtrim($value);
}

Xoá khoảng trắng hai đầu chuỗi

Sử dụng hàm lrtrim và rtrim ở trên để xoá khoảng trắng khỏi hai đầu chuỗi

public static function trim($value, $fullsize = true)
{ if ($fullsize) { $value = self::rtrim(self::ltrim($value)); } return trim($value);
}

Đảo ngược chữ hoa thành chữ thường và ngược lại

Hàm chỉ hoạt động với các ký tự ASCII

public static function invertCase($value)
{ return strtolower($value) ^ strtoupper($value) ^ $value;
}
echo Str::invertCase('aBCd'); // 'AbcD'

Tìm kiếm một chuỗi trong một chuỗi cho trước

Trả về phần còn lại của một chuỗi sau lần xuất hiện đầu tiên của một giá trị nhất định.

public static function after($subject, $search)
{ $offset = self::strpos($subject, $search) + self::strlen($search); return self::substr($subject, $offset);
}
echo Str::after('Hello. Nice to meet you!', 'meet'); // return ' you!'
echo Str::after('Hello. Nice to meet you!', 'o'); // return '. Nice to meet you!'

Trả về phần còn lại của một chuỗi sau lần xuất hiện cuối cùng của một giá trị nhất định.

public static function afterLast($subject, $search)
{ $offset = self::strrpos($subject, $search) + self::strlen($search); return self::substr($subject, $offset);
}
echo Str::after('Hello. Nice to meet you!', 'meet'); // return ' you!'
echo Str::after('Hello. Nice to meet you!', 'o'); // return 'u!' 

Lấy phần của một chuỗi trước lần xuất hiện đầu tiên của một giá trị nhất định.

public static function before($subject, $search)
{ return self::substr($subject, 0, self::strpos($subject, $search));
}
echo Str::before('Hello. Nice to meet you!', 'meet'); // return 'Hello. Nice to '
echo Str::before('Hello. Nice to meet you!', 'o'); // return 'Hell'

Trả về mọi thứ trước lần xuất hiện cuối cùng của giá trị đã cho trong một chuỗi.

public static function beforeLast($subject, $search)
{ return self::substr($subject, 0, self::strrpos($subject, $search));
}
echo Str::before('Hello. Nice to meet you!', 'meet'); // return 'Hello. Nice to '
echo Str::before('Hello. Nice to meet you!', 'o'); // return 'Hello. Nice to meet y'

Chuyển đổi chuỗi sang dạng StudlyCaps

Còn được gọi là kiểu PascalCase, ngụ ý rằng viết hoa đầu tiên của mỗi từ khóa con.

public static function studly($value)
{ $words = explode(' ', str_replace(['-', '_'], ' ', $value)); $studlyWords = array_map(function ($word) { return ucfirst($word); }, $words); return implode($studlyWords);
}
echo Str::studly('hello_world'); // return 'HelloWorld'

Chuyển đổi chuỗi sang dạng camelCase(kiểu lạc đà)

public static function camel($value)
{ return lcfirst(self::studly($value));
}
echo Str::camel('hello_world'); // return 'helloWorld'

Chuyển chuỗi đã cho thành chữ hoa tiêu đề

public static function title($value)
{ return mb_convert_case($value, MB_CASE_TITLE, 'UTF-8');
}
echo Str::title('hello world'); // return 'Hello World'
echo Str::title('hello_world'); // return 'Hello_World'

Tách một chuỗi thành nhiều phần bằng các ký tự viết hoa

public static function ucsplit($string)
{ return preg_split('/(?=\p{Lu})/u', $string, -1, PREG_SPLIT_NO_EMPTY);
}
$string = Str::ucsplit('HelloWorld')); // [0 => 'Hello', 1 => 'World']

Chuyển chuỗi đã cho thành chữ hoa tiêu đề cho mỗi từ

public static function headline($value)
{ $parts = explode(' ', $value); $parts = count($parts) > 1 ? $parts = array_map([static::class, 'title'], $parts) : $parts = array_map([static::class, 'title'], static::ucsplit(implode('_', $parts))); $collapsed = str_replace(['-', '_', ' '], '_', implode('_', $parts)); return implode(' ', array_filter(explode('_', $collapsed)));
} echo Str::headline('hello_world')); // return 'Hello World' echo Str::headline('Hello World')); // return 'Hello World'

Chuyển đổi chuỗi sang dạng snake_case (dạng con rắn)

public static function snake($value, $delimiter = '_')
{ if (! ctype_lower($value)) { $value = preg_replace('/\s+/u', '', ucwords($value)); $value = static::lower(preg_replace('/(.)(?=[A-Z])/u', '$1'.$delimiter, $value)); } return $value;
}
echo Str::snake('HelloWorld'); //return 'hello_world'
echo Str::snake('Hello World'); //return 'hello_world'

Chuyển đổi chuỗi sang dạng kebab-case

public static function kebab($value)
{ return static::snake($value, '-');
}
echo Str::snake('Hello World', '-'); //return 'hello-world'

Tạo một "slug" thân thiện với URL từ một chuỗi đã cho

public static function slug($title, $separator = '-')
{ $flip = $separator === '-' ? '_' : '-'; $title = preg_replace('/['.preg_quote($flip).']+/u', $separator, $title); $title = str_replace('@', $separator.'at'.$separator, $title); $title = preg_replace('/[^'.preg_quote($separator).'\pL\pN\s]+/u', '', strtolower($title)); $title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title); return self::trim($title, $separator);
}
echo Str::slug('Hello World'); // return 'hello-word'
echo Str::slug('_@.com');; // return 'hello-at-word'
echo Str::slug('?^!#$%^&*()~`"_@.com'); // return 'hello-at-word'

Kiểm tra một chuỗi có phải toàn là ký tự tiếng nhật hay không

public static function isJapanese($value)
{ return !!preg_match('/^[\p{Katakana}\p{Hiragana}\p{Han}]+$/u', $value);
} echo Str::isJapanese('気をつけてね'); // true
echo Str::isJapanese('気をつけてね。'); // false
echo Str::isJapanese('abc'); // false

Kiểm tra một chuỗi có phải toàn là ký tự Furigana hay không

public static function isFurigana($value)
{ return !!preg_match('/^[\p{Katakana}\p{Hiragana}]+$/u', $value);
} echo Str::isFurigana('気をつけてね'); // false
echo Str::isFurigana('つけてね'); // true
echo Str::isFurigana('abc'); // false

Kiểm tra một chuỗi có phải toàn là ký tự Hiragana hay không

public static function isHiragana($value)
{ return !!preg_match('/^[\p{Hiragana}]+$/u', $value);
} echo Str::isHiragana('気'); // false
echo Str::isHiragana('片仮名'); // false
echo Str::isHiragana('つけてね'); // true
echo Str::isHiragana('abc'); // false

Kiểm tra một chuỗi có phải toàn là ký tự Katakana hay không

public static function isKatakana($value)
{ return !!preg_match('/^[\p{Katakana}]+$/u', $value);
} echo Str::isKatakana('気'); // false
echo Str::isKatakana('片仮名'); // false
echo Str::isKatakana('つけてね'); // false
echo Str::isKatakana('カタカナ'); // true
echo Str::isKatakana('abc'); // false

Kiểm tra một chuỗi có phải toàn là ký tự Hankaku(Half-width kana) hay không

public static function isHankakus($value)
{ return !!preg_match('/^[\p{Han}]+$/u', $value);
} echo Str::isHankakus('気'); // echo Str::isHankakus('片仮名'); // true
echo Str::isHankakus('つけてね'); // false
echo Str::isHankakus('カタカナ'); // false
echo Str::isHankakus('abc'); // false

Uiza, cũng khá dài rồi, để phần 2 viết tiếp vậy. Thank for watching 😘

Tham khảo file full tại đây .

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 374

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Sử dụng Swagger để xây dựng API documentation

Giới thiệu về Swagger. RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource.

0 0 1k

- vừa được xem lúc

So sánh Interface và Abstract trong lập trình hướng đối tượng.

Tổng quan. Interface và Abstract class là 2 khái niệm cơ bản trong lập trình OOP.

0 0 48

- vừa được xem lúc

CURL và cách sử dụng trong PHP

Giới Thiệu. CURL là bộ thư viện được sử dụng để giúp thực hiện việc chuyển dữ liệu thông qua nhiều giao thức khác nhau (như HTTP, FPT...). Với giao thức HTTP, cURL hỗ trợ việc gửi dữ liệu sử dụng tất cả các phương thức hiện có như GET, POST, PUT, DELETE... cURL cũng hỗ trợ việc chuyền dữ liệu sử dụn

0 0 77

- vừa được xem lúc

Thêm dòng dữ liệu mới (MySQL) trong Laravel

Chào các bạn, Laravel hiện đang là hot trend trong "thế giới PHP". 1. Cấu hình cơ bản ban đầu. .

0 0 38