初歩的な質問で済みません。。
今、入力内容が人名で有るのかを調べる関数を作ろうとしています。
具体的には、
1、漢字、ひらがな、全角カタカナでの入力であるか。
2、性名の間に全角スペースが入っているか。(出来れば、外国名の場合はミドルネームの前後にスペース)
を判別したいのです。
正規表現を使えば良いと思うのですが、webを調べましたが具体的な記事が見つかりませんでした。
どうやら自分には正規表現が理解しがたいようです。。
詳しい方、解りやすく教えて下さい!

このQ&Aに関連する最新のQ&A

A 回答 (4件)

No2です。

以下だめですかねえ、問題ないと思うのですが..
※ここに投稿する時半角カタカナのア-ンが全角カタカナのア-ンに勝手に変わってます。
<?php
mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");
$namae = $_REQUEST['namae'];
$patarn = "[^_a-zA-Z0-9ア-ン]+( [^_a-zA-Z0-9ア-ン]+)+";
if(mb_ereg_match($patarn,$namae)){
echo "match";
}else{
echo "unmach";
}
?>
    • good
    • 0
この回答へのお礼

返事が遅れて済みません。
開発用のPCを離れていました。
どうやら、全く問題なく機能しているようです。
文字コードを指定する必要が有ると言う事ですかね。
考えて下さって、有り難うございます。
これで作業が進みます。

お礼日時:2009/06/05 22:28

utf-8でしたら、


preg_match('/^[ア-ンあ-ん亜-腕弌-熙a-zA-Z]+[ | ][ァ-ヶぁ-ん亜-腕弌-熙a-zA-Z]+$/', $name) > '0'
 ↓
preg_match('/^[ア-ンあ-ん一-龠a-zA-Z]+[ | ][ァ-ヶぁ-ん一-龠a-zA-Z]+$/', $name) > '0'

 ですが、名字がひらがなというのはないような気がしたので、
 ↓
preg_match('/^[ア-ン一-龠a-zA-Z]+[ | ][ァ-ヶぁ-ん一-龠a-zA-Z]+$/', $name) > '0'

 が、近似値と思ったのですが、「ひらがなのみでの入力の場合スペースを入れなくても真になってしまうようです」・・・あれ、何ででしょう?「一-龠」の中にスペースが含まれるとか?
 レベル低くて済みませんでした。

>>これを元に自分も考えてみようと思います。
 結果が分かったら教えてくださいませ。
    • good
    • 0
この回答へのお礼

すみません、返事が遅れてしまいました。
どうやらバグのようです。。
参考サイト↓
http://mlog.euqset.org/archives/php-users.php.gr …
半角スペースを使用すれば問題ないようですが。。。
姓名の間に半角スペースというのはユーザビリティーが最悪に。。
たしかに、名字がひらがなは無さそうなのでこのまま使おうと思います。
まぁよく考えたら、姓名別々に入力してPHP側でスペースを入れて結合するのが一番楽かなと。。。
今回は助けていただきありがとうございました。

お礼日時:2009/06/01 13:01

マルチバイト対応のmb_ereg関数を使って、英数字と半角カタカナ以外


の文字全部の1文字以上としてしまえばどうでしょう。
if (mb_ereg_match("[^_a-zA-Z0-9ア-ン]+( [^_a-zA-Z0-9ア-ン]+)+", 対象変数))
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
簡単な条件分岐のコードで試してみましたが、
Warning: mb_ereg_match() [function.mb-ereg-match]: mbregex compile err: premature end of char-class in /virtual/shady/public_html/phptest/test2_2.php on line 11
と言うエラーが出てしまいました。。。

お礼日時:2009/05/29 23:38

$name = '斎 藤太郎';



if(preg_match('/^[ア-ンあ-ん亜-腕弌-熙a-zA-Z]+[ | ][ァ-ヶぁ-ん亜-腕弌-熙a-zA-Z]+$/', $name) > '0') print "全角スペースが入っています";
else print "全角スペースが入っていません";

--------------------------
(カタカナ、ひらがな、漢字)の文字 + 全角/半角スペース1個 + (カタカナ、ひらがな、漢字)の文字の正規表現です。

上記のはeuc-jpです。漢字は第二水準まで。
utf-8 にすると、亜-腕弌-熙 → 一-龠 に変更すると全ての漢字になります。
shift_jisは未確認。

厳密な確認をしていませんが。
    • good
    • 0
この回答へのお礼

回答有り難うございます。
概ね成功ですが、ただひらがなのみでの入力の場合スペースを入れなくても真になってしまうようです。
これを元に自分も考えてみようと思います。
ちなみにutf-8で開発しています。

お礼日時:2009/05/29 23:47

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QLEFT JOINが2つあるSQL文でANDの意味

■下記SQL文の意味を教えてください

SELECT a.*, b.being_name
FROM alive a
 LEFT JOIN being b ON a.hoge_id = b.id
 LEFT JOIN call c ON c.call_id = a.hoge_id
  AND f.hoge_id = 12
 WHERE f.hoge_id = 12 OR b.id = 12

※12の部分は動的に切り替わります

・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか?
・左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか?

>SELECT フィールド名 FROM テーブル名 WHERE 条件式1 AND 条件式2
>「AND」は2つの条件式の論理積
・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか? それともこのSQLの「AND」は違う使い方をしているのでしょうか? 何か、LEFT JOINに関係しているのでしょうか?

■下記SQL文の意味を教えてください

SELECT a.*, b.being_name
FROM alive a
 LEFT JOIN being b ON a.hoge_id = b.id
 LEFT JOIN call c ON c.call_id = a.hoge_id
  AND f.hoge_id = 12
 WHERE f.hoge_id = 12 OR b.id = 12

※12の部分は動的に切り替わります

・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか?
・左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか?

>SELECT フィールド名 FROM テーブル名 WHERE 条件式1 AND 条件式...続きを読む

Aベストアンサー

>・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか?
はいそうです。

>左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか?
はいそうです。(alive→beingって言うような意味です。)

>・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか?
「AND]は「WHERE」にかかっているのではなく「LEFT 」の結合の条件となります。
SELECT a.*, b.being_name
FROM alive a
LEFT JOIN being b ON a.hoge_id = b.id
LEFT JOIN call c ON (c.call_id = a.hoge_id AND f.hoge_id = 12)
WHERE f.hoge_id = 12 OR b.id = 12

<<追記>>
このSQLにはfというテーブルが存在しないのでエラーとなります。

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む


人気Q&Aランキング

おすすめ情報