Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
63.64% |
7 / 11 |
CRAP | |
67.39% |
31 / 46 |
Strings | |
0.00% |
0 / 1 |
|
63.64% |
7 / 11 |
52.28 | |
67.39% |
31 / 46 |
isPositiveInterger | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
isGteZeroInteger | |
100.00% |
1 / 1 |
4 | |
100.00% |
5 / 5 |
|||
isOuterBmpUnicode | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
removeCrLf | |
100.00% |
1 / 1 |
3 | |
100.00% |
5 / 5 |
|||
isUtf8 | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
convertEol | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
hasControlChars | |
100.00% |
1 / 1 |
4 | |
100.00% |
10 / 10 |
|||
rand | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 3 |
|||
createRandomString | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
createRandomStringMcrypt | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
bin2String | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 8 |
<?php | |
namespace Puyo\Util; | |
/** | |
* 文字列関連ユーティリティ | |
* @version 1.2.1 | |
* @uses openssl | |
*/ | |
class Strings | |
{ | |
/** | |
* 正の整数(ゼロを含まない)か否かを返す | |
* @param string $str | |
* @return bool | |
*/ | |
public static function isPositiveInterger($str) { | |
if(1 !== preg_match('/\A[1-9][0-9]*\z/u', $str)) { | |
return false; | |
} | |
return true; | |
} | |
/** | |
* (>= 0) の整数数字か否かを返す | |
* @param string $str | |
* @return bool | |
*/ | |
public static function isGteZeroInteger($str) { | |
if(1 !== preg_match('/\A[0-9]+\z/u', $str)) { | |
return false; | |
} | |
if(strlen($str) >= 2 && substr($str, 0, 1) === '0') { | |
return false; | |
} | |
return true; | |
} | |
/** | |
* 文字がBMP外かどうかを返す | |
* | |
* 4バイト以上であればBMP外とみなす | |
* @param string $utf8Char UTF-8 の1文字 | |
* @return bool BMP外かどうか | |
* @since 1.2.0 | |
*/ | |
public static function isOuterBmpUnicode($utf8Char) { | |
$strHex = bin2hex($utf8Char); | |
if(strlen($strHex) > 6) { | |
return true; | |
} | |
return false; | |
} | |
/** | |
* 改行コードを取り除いて返す | |
* @param string $str | |
* @param bool $rmCr CR(0x0d) を取り除くか | |
* @param bool $rmLf LF(0x0a) を取り除くか | |
* @return string | |
*/ | |
public static function removeCrLf($str, $rmCr=true, $rmLf=true) { | |
if($rmCr) { | |
$str = str_replace("\r", '', $str); | |
} | |
if($rmLf) { | |
$str = str_replace("\n", '', $str); | |
} | |
return $str; | |
} | |
/** | |
* 文字列がUTF-8かどうかを返す | |
* @param string $str | |
* @return bool | |
*/ | |
public static function isUtf8($str) { | |
if(1 === preg_match('//u', $str)) { | |
return true; | |
} | |
return false; | |
} | |
/** | |
* 改行コードを変換して返す | |
* @param string $str | |
* @param string $newEol "\n", "\r", "\r\n" | |
* @return string | |
* @since 1.1.0 | |
*/ | |
public static function convertEol($str, $newEol="\n") { | |
return strtr($str, array_fill_keys(array("\r\n", "\r", "\n"), $newEol)); | |
} | |
/** | |
* 文字列中に制御文字が存在するか否かを返す | |
* $cchars を指定しない場合は、「水平タブ、CR、LF」を除いた1f以下のものがすべて対象となる | |
* | |
* 00=NUL 01=SOH 02=STX 03=ETX 04=EOT 05=ENQ 06=ACK 07=BEL | |
* 08=BS 09=HT 0a=LF 0b=VT 0c=FF 0d=CR 0e=SO 0f=SI | |
* 10=DLE 11=DC1 12=DC2 13=DC3 14=DC4 15=NAK 16=SYN 17=ETB | |
* 18=CAN 19=EM 1a=SUB 1b=ESC 1c=FS 1d=GS 1e=RS 1f=US | |
* @param string $str | |
* @param int[] $cchars 制御文字扱いするASCIIコードリスト | |
* @return bool | |
*/ | |
public static function hasControlChars($str, $cchars=array()) { | |
$asciiCchars = array( | |
'\0', "\x01", "\x02", "\x03,", "\x04", "\x05", "\x06", "\x07", | |
"\x08", "\x09", "\x0a", "\x0b,", "\x0c", "\x0d", "\x0e", "\x0f", | |
"\x10", "\x11", "\x12", "\x13,", "\x14", "\x15", "\x16", "\x17", | |
"\x18", "\x19", "\x1a", "\x1b,", "\x1c", "\x1d", "\x1e", "\x1f", | |
); | |
// デフォルトは 09(HT), 0a(LF), 0d(CR) を除くASCII制御文字をすべて拒否 | |
if($cchars === array()) { | |
$cchars = $asciiCchars; | |
unset($cchars[0x09], $cchars[0x0a], $cchars[0x0d]); | |
} | |
$strCchars = ''; | |
foreach($cchars as $c) { | |
$strCchars .= $c; | |
} | |
// if(1 === preg_match('/\A[^:cntrl:]\z/u', $str)) { | |
if(1 === preg_match('/['.$strCchars.']/u', $str)) { | |
return true; | |
} | |
return false; | |
} | |
/** | |
* 指定文字種・文字長で極力ランダムな文字列を生成して返す | |
* @param string $chars 使用する文字のリスト | |
* @param int $length 作成する文字列の長さ | |
* @return string | |
* @uses mcrypt | |
* @deprecated 1.1.0 | |
* @see createRandomString() | |
*/ | |
public static function rand($chars, $length) { | |
if(strlen($chars) === 0 || $length <= 0) { | |
return ''; | |
} | |
return static::createRandomStringMcrypt($chars, $length); | |
} | |
/** | |
* 指定文字種・文字長で極力ランダムな文字列を生成して返す | |
* @param string $chars 使用する文字のリスト | |
* @param int $length 作成する文字列の長さ | |
* @return string | |
* @uses openssl | |
* @since 1.1.0 | |
*/ | |
public static function createRandomString($chars, $length) { | |
$bin = openssl_random_pseudo_bytes($length); | |
return static::bin2String($bin, $chars); | |
} | |
/** | |
* 指定文字種・文字長で極力ランダムな文字列を生成して返す | |
* libmcrypt は長期間メンテされていないので openssl を使う方がよい | |
* @param string $chars 使用する文字のリスト | |
* @param int $length 作成する文字列の長さ | |
* @return string | |
* @uses mcrypt | |
* @deprecated 1.1.0 | |
* @see createRandomString() | |
*/ | |
public static function createRandomStringMcrypt($chars, $length) { | |
$bin = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM); | |
return static::bin2String($bin, $chars); | |
} | |
/** | |
* バイナリを文字列に変換して返す | |
* @param string $bin | |
* @param string $chars 使用する文字列の羅列 | |
* @return string | |
*/ | |
private static function bin2String($bin, $chars) { | |
if(strlen($bin) === 0 || strlen($chars) === 0) { | |
return ''; | |
} | |
$charsLen = strlen($chars); | |
$length = strlen($bin); | |
$result = ''; | |
for($i = 0; $i < $length; $i++) { | |
$result .= substr($chars, ord(substr($bin, $i, 1)) % $charsLen, 1); | |
} | |
return $result; | |
} | |
} |