前提・実現したいこと
以下の16真数の値を正規表現でチェックしたいです
x3040~x3096
の値をチェックするのに以下のようにしましたが
正しく正規表現チェックできません
どこがおかしいのでしょうか?
/\A[\x{3041}-\x{3096}]*\z$/u
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
あなたの言う「16進数」とは具体的に何のことですか?
お書きの正規表現は、ユニコードの文字のコードポイントを指定してある範囲の文字(この例だとひらがなか)を判別するための物です。ひらがな文字を判断したいのなら、それでいいです。上端下端は調整が必要かも。
"x3040"
のような文字列データ(文字x
の後に16進文字が4つ続いた文字列)のことを言っているのであれば、1文字じゃなくて5文字の文字列としてマッチする正規表現が必要なので、文字クラスで範囲指定という話では無いです。
⇒ yambejpさんの回答。
0x3040
の様な整数値の16進数表現の事であれば、正規表現でなく、大小比較でしょう。
PHP
1$v = 0x3044; 2if($v>=0x3040 && $v<=0x3096) {
投稿2021/11/24 06:25
総合スコア85964
0
'/\A[\x{3041}-\x{3096}\x{309D}\x{309E}\x{3000}\x{30FC}]*\z$/u'
こういった正規表現があったので。こんなふうに範囲指定ができるのかなと思ったんですが
PHP 7.4.16 では上記の正規表現で問題はないですね。。。
一応、「ひらがな」には Unicode 文字プロパティ を使うことができますので以下の様にも書けます。
<?php echo preg_match("/\A[\p{Hiragana}\u{3000}\u{309d}\u{309e}\u{30fc}]*\Z/u", "ぁ ゝかはゃゖゞ") . "\n"; echo preg_match("/\A[\p{Hiragana}\u{3000}\u{309d}\u{309e}\u{30fc}]*\Z/u", "aあいうえお ゞ") . "\n"; # 1 0
x309A-x309F
までを範囲指定することはできないのでしょうか?\x{3041}-\x{3096}
の数字なら範囲で指定できますが、x309A-x309F
は一つずつ指定しなくてはいけないのでしょうか?
php
1<?php 2 3echo preg_match("/\A[\u{309A}-\u{309F}]*\Z/u", "゚゛゜ゝゞゟ") . "\n"; 4 5# 61
投稿2021/11/24 10:24
編集2021/11/24 11:44総合スコア20690
0
x30(4[1-9a-f]|[5-8][0-9a-f]|9[0-6])あたりをチェックすればよいのでは?
投稿2021/11/24 05:58
編集2021/11/24 06:00総合スコア116890
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/24 06:02
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/24 06:34
2021/11/24 06:35
2021/11/24 06:48
2021/11/24 07:04
2021/11/24 07:05
2021/11/24 09:37