<script> function zenkaku2Hankaku(str){ return str.replace(/[A-Za-z0-9]/g, function(s){ return String.fromCharCode(s.charCodeAt(0) + 0xFEE0); }); } console.log(zenkaku2Hankaku("123abC")); </script>
JSで書く場合も基本はスクリプトの中に辞書を持って変換しているのね。
仕組みを理解した。
ソフトウェアエンジニアの技術ブログ:Software engineer tech blog
随机应变 ABCD: Always Be Coding and … : хороший
<script> function zenkaku2Hankaku(str){ return str.replace(/[A-Za-z0-9]/g, function(s){ return String.fromCharCode(s.charCodeAt(0) + 0xFEE0); }); } console.log(zenkaku2Hankaku("123abC")); </script>
JSで書く場合も基本はスクリプトの中に辞書を持って変換しているのね。
仕組みを理解した。
mb_internal_encoding('utf-8'); $kana2romaji = new Kana2Romaji; $str = "これは、ローマじへんかんのじっけんです"; $result = $kana2romaji->convert($str); header("Content-type: text/html;charset=utf8"); echo $result; class Kana2Romaji { function convert($str){ $str = mb_convert_kana($str, "cHV", "utf-8"); $kana = array( 'きゃ', 'きぃ', 'きゅ', 'きぇ', 'きょ', 'ぎゃ', 'ぎぃ', 'ぎゅ', 'ぎぇ', 'ぎょ', 'くぁ', 'くぃ', 'くぅ', 'くぇ', 'くぉ', 'ぐぁ', 'ぐぃ', 'ぐぅ', 'ぐぇ', 'ぐぉ', 'しゃ', 'しぃ', 'しゅ', 'しぇ', 'しょ', 'じゃ', 'じぃ', 'じゅ', 'じぇ', 'じょ', 'ちゃ', 'ちぃ', 'ちゅ', 'ちぇ', 'ちょ', 'ぢゃ', 'ぢぃ', 'ぢゅ', 'ぢぇ', 'ぢょ', 'つぁ', 'つぃ', 'つぇ', 'つぉ', 'てゃ', 'てぃ', 'てゅ', 'てぇ', 'てょ', 'でゃ', 'でぃ', 'でぅ', 'でぇ', 'でょ', 'とぁ', 'とぃ', 'とぅ', 'とぇ', 'とぉ', 'にゃ', 'にぃ', 'にゅ', 'にぇ', 'にょ', 'ヴぁ', 'ヴぃ', 'ヴぇ', 'ヴぉ', 'ひゃ', 'ひぃ', 'ひゅ', 'ひぇ', 'ひょ', 'ふぁ', 'ふぃ', 'ふぇ', 'ふぉ', 'ふゃ', 'ふゅ', 'ふょ', 'びゃ', 'びぃ', 'びゅ', 'びぇ', 'びょ', 'ヴゃ', 'ヴぃ', 'ヴゅ', 'ヴぇ', 'ヴょ', 'ぴゃ', 'ぴぃ', 'ぴゅ', 'ぴぇ', 'ぴょ', 'みゃ', 'みぃ', 'みゅ', 'みぇ', 'みょ', 'りゃ', 'りぃ', 'りゅ', 'りぇ', 'りょ', 'うぃ', 'うぇ', 'いぇ' ); $romaji = array( 'kya', 'kyi', 'kyu', 'kye', 'kyo', 'gya', 'gyi', 'gyu', 'gye', 'gyo', 'qwa', 'qwi', 'qwu', 'qwe', 'qwo', 'gwa', 'gwi', 'gwu', 'gwe', 'gwo', 'sya', 'syi', 'syu', 'sye', 'syo', 'ja', 'jyi', 'ju', 'je', 'jo', 'cha', 'cyi', 'chu', 'che', 'cho', 'dya', 'dyi', 'dyu', 'dye', 'dyo', 'tsa', 'tsi', 'tse', 'tso', 'tha', 'ti', 'thu', 'the', 'tho', 'dha', 'di', 'dhu', 'dhe', 'dho', 'twa', 'twi', 'twu', 'twe', 'two', 'nya', 'nyi', 'nyu', 'nye', 'nyo', 'va', 'vi', 've', 'vo', 'hya', 'hyi', 'hyu', 'hye', 'hyo', 'fa', 'fi', 'fe', 'fo', 'fya', 'fyu', 'fyo', 'bya', 'byi', 'byu', 'bye', 'byo', 'vya', 'vyi', 'vyu', 'vye', 'vyo', 'pya', 'pyi', 'pyu', 'pye', 'pyo', 'mya', 'myi', 'myu', 'mye', 'myo', 'rya', 'ryi', 'ryu', 'rye', 'ryo', 'wi', 'we', 'ye' ); $str = $this->kana_replace($str, $kana, $romaji); $kana = array( 'あ', 'い', 'う', 'え', 'お', 'か', 'き', 'く', 'け', 'こ', 'さ', 'し', 'す', 'せ', 'そ', 'た', 'ち', 'つ', 'て', 'と', 'な', 'に', 'ぬ', 'ね', 'の', 'は', 'ひ', 'ふ', 'へ', 'ほ', 'ま', 'み', 'む', 'め', 'も', 'や', 'ゆ', 'よ', 'ら', 'り', 'る', 'れ', 'ろ', 'わ', 'ゐ', 'ゑ', 'を', 'ん', 'が', 'ぎ', 'ぐ', 'げ', 'ご', 'ざ', 'じ', 'ず', 'ぜ', 'ぞ', 'だ', 'ぢ', 'づ', 'で', 'ど', 'ば', 'び', 'ぶ', 'べ', 'ぼ', 'ぱ', 'ぴ', 'ぷ', 'ぺ', 'ぽ' ); $romaji = array( 'a', 'i', 'u', 'e', 'o', 'ka', 'ki', 'ku', 'ke', 'ko', 'sa', 'shi', 'su', 'se', 'so', 'ta', 'chi', 'tsu', 'te', 'to', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'hi', 'fu', 'he', 'ho', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'yu', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wyi', 'wye', 'wo', 'n', 'ga', 'gi', 'gu', 'ge', 'go', 'za', 'ji', 'zu', 'ze', 'zo', 'da', 'ji', 'du', 'de', 'do', 'ba', 'bi', 'bu', 'be', 'bo', 'pa', 'pi', 'pu', 'pe', 'po' ); $str = $this->kana_replace($str, $kana, $romaji); $str = preg_replace('/(っ$|っ[^a-z])/u', "xtu", $str); $res = preg_match_all('/(っ)(.)/u', $str, $matches); if(!empty($res)){ for($i=0;isset($matches[0][$i]);$i++){ if($matches[0][$i] == 'っc') $matches[2][$i] = 't'; $str = preg_replace('/' . $matches[1][$i] . '/u', $matches[2][$i], $str, 1); } } $kana = array( 'ぁ', 'ぃ', 'ぅ', 'ぇ', 'ぉ', 'ヵ', 'ヶ', 'っ', 'ゃ', 'ゅ', 'ょ', 'ゎ', '、', '。', ' ' ); $romaji = array( 'a', 'i', 'u', 'e', 'o', 'ka', 'ke', 'xtu', 'xya', 'xyu', 'xyo', 'xwa', ', ', '.', ' ' ); $str = $this->kana_replace($str, $kana, $romaji); $str = preg_replace('/^ー|[^a-z]ー/u', '', $str); $res = preg_match_all('/(.)(ー)/u', $str, $matches); if($res){ for($i=0;isset($matches[0][$i]);$i++){ if( $matches[1][$i] == "a" ){ $replace = 'â'; } else if( $matches[1][$i] == "i" ){ $replace = 'î'; } else if( $matches[1][$i] == "u" ){ $replace = 'û'; } else if( $matches[1][$i] == "e" ){ $replace = 'ê'; } else if( $matches[1][$i] == "o" ){ $replace = 'ô'; } else { $replace = ""; } $str = preg_replace('/' . $matches[0][$i] . '/u', $replace, $str, 1); } } return $str; } function kana_replace($str, $kana, $romaji){ $patterns = array(); foreach($kana as $value){ $patterns[] = "/" . $value . "/"; } $str = preg_replace($patterns, $romaji, $str); return $str; } }
なるほど、プログラムの中に辞書を作っておいて、変換してる訳ね。
ini_set('display_errors', "On"); function seireki($wareki_year){ $wareki_year = str_replace("元年", "1年", mb_convert_kana($wareki_year, "n")); if(preg_match('!^(明治|大正|昭和|平成|令和)([0-9]+)年$!', $wareki_year, $matches)){ $era_name = $matches[1]; $year = intval($matches[2]); if($era_name === "明治"){ $year += 1867; } else if($era_name === "大正"){ $year += 1911; } else if($era_name === "昭和"){ $year += 1925; } else if($era_name === "平成"){ $year += 1988; } else if($era_name === "令和"){ $year += 2018; } return $year . "年"; } return null; } echo seireki("平成元年");
$ php index.php
1989年
preg_matchで元号と年を分割する訳ね。なるほど、ロジックはわかった。
ini_set('display_errors', "On"); function wareki($year){ $eras = array( array('year' => 2018, "name" => "令和"), array('year' => 1988, "name" => "平成"), array('year' => 1925, "name" => "昭和"), array('year' => 1911, "name" => "大正"), array('year' => 1867, "name" => "明治") ); foreach($eras as $era){ $base_year = $era['year']; $era_name = $era['name']; if($year > $base_year){ $era_year = $year - $base_year; if($era_year === 1){ return $era_name . "元年"; } return $era_name . $era_year ."年"; } } return null; } echo wareki(1989);
$ php index.php
平成元
なるほど、これは凄い
$num = 100000; echo number_format($num);
$ php index.php
100,000
カンマ除去
$num = "100,000"; echo str_replace(",", "", $num);
$ php index.php
100000
半角カナ→全角カナ
$str = "キャピタルメディア"; echo mb_convert_kana($str, "KV");
$ php index.php
キャピタルメディア
全角カナ→半角カナ
$str = "キャピタルメディア"; echo mb_convert_kana($str, "kV");
$ php index.php
キャピタルメディアva
カナ以外にも、数字、英字、スペースも変換できる。なるほど。
日付変換
$date = "20230321"; echo date("Y/m/d", strtotime($date));
php index.php
2023/03/21
$date = "20230321"; echo date("Y年m月d日", strtotime($date));
$ php index.php
2023年03月21日
ゼロパディング
$num = 7; $num2 = sprintf('%03d', $num); echo $num2;
$ php index.php
007
前ゼロ除去
L intにキャスト
$str = "00070"; $str = (int)$str; echo $str;
ltrim
$str = "00070"; $str = ltrim($str, 0); echo $str;
$intermediate = "-"; $var1 = "いつかは"; $var2 = "ゆかし"; $joined = $var1 . $intermediate . $var2; echo $joined;
$ php index.php
いつかは-ゆかし
$var = true; if($var){ echo "成功"; } else { echo "失敗"; }
$ php index.php
成功
$var = false; if($var){ echo "成功"; } else { echo "失敗"; }
$ php index.php
失敗
ifでtrue, falseを判定できる
pdbを使用できる
import pdb def factorial(n, sum=0): if n == 0: return sum pdb.set_trace() sum += n print(sum) return factorial(n-1, sum) if __name__ == "__main__": factorial(5)
$ python3 test.py > /home/vagrant/dev/test/test.py(8)factorial() -> sum += n (Pdb) bt /home/vagrant/dev/test/test.py(13)<module>() -> factorial(5) > /home/vagrant/dev/test/test.py(8)factorial() -> sum += n (Pdb) list 3 def factorial(n, sum=0): 4 if n == 0: 5 return sum 6 7 pdb.set_trace() 8 -> sum += n 9 print(sum) 10 return factorial(n-1, sum) 11 12 if __name__ == "__main__": 13 factorial(5) (Pdb)
# coding:utf-8 import unittest import fizzbuzz as fb class FizzBuzzTest(unittest.TestCase): def setUp(self): pass def tearDown(self): pass def test_normal(self): self.assertEqual(1, fb.fizzbuzz(1)) def test_fizz(self): self.assertEqual("Fizz", fb.fizzbuzz(3)) def test_buzz(self): self.assertEqual("Buzz", fb.fizzbuzz(5)) def test_fizzbuzz(self): self.assertEqual("FizzBuzz", fb.fizzbuzz(3)) if __name__ == "__main__": unittest.main()
メインコード
# coding:utf-8 def fizzbuzz(number): if number % 15 == 0: return "FizzBuzz" if number % 5 == 0: return "Buzz" if number % 3 == 0: return "Fizz" return number if __name__ == "__main__": for i in range(1, 101): print(fizzbuzz(i))
t$ python3 test_fizzbuzz.py
..F.
======================================================================
FAIL: test_fizzbuzz (__main__.FizzBuzzTest)
———————————————————————-
Traceback (most recent call last):
File “test_fizzbuzz.py”, line 23, in test_fizzbuzz
self.assertEqual(“FizzBuzz”, fb.fizzbuzz(3))
AssertionError: ‘FizzBuzz’ != ‘Fizz’
– FizzBuzz
+ Fizz
———————————————————————-
Ran 4 tests in 0.002s
FAILED (failures=1)