初歩的な質問で済みません。。
今、入力内容が人名で有るのかを調べる関数を作ろうとしています。
具体的には、
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と関連する良く見られている質問

Qスペースワールド割引きっぷについてっ

友達とハウステンボスで遊んだ帰りに早岐駅からスペースワールドまで行きたいのですが、
JRスペースワールド割引きっぷを使うといくらくらいになりますか?

ちなみに学生です。

終点はスペースワールド駅というのがあるのですか?

教えていただけるとありがたいです!
宜しくお願いします。

Aベストアンサー

早岐発の「スペースワールドきっぷ」の価格は大人用が9400円、学生(キャンパス)用が8600円ですね。
ちなみに「スペースワールド駅」という駅が存在します。

参考URL:http://www.jrkyushu.co.jp/tabi/ticket/kippu_sw.jsp
(JR九州/スペースワールドきっぷ)

>>友達とハウステンボスで遊んだ帰り

「スペースワールドきっぷ」は早岐からスペースワールドへの「往復」のJR券とスペースワールドフリーパスがセットになっていますが、早岐から出発して早岐に戻ってくるんですよね?
片道だけの利用も可能ですが、逆に損になるかもしれませんよ?

Q全角カタカナの正規表現

if (preg_match('/[ァ-ヶー]+/', $value, $match )) {
print ("$value"."はカタカナです。"."($match[0])"."<br />")
} else {
print ("$value"."はカタカナではない。<br />");
}
という感じで全角カタカナにマッチさせる正規表現を使いたいのですが、このやり方だと「全角カタカナを含んでいる…」という表現になってしまいます。ある文字列が「すべて全角カタカナである」という正規表現を考えているのですが、なかなかうまくいきません。逆引きのサンプルなんかでもなかなか見つからなくて困っています。
 同様に「すべて平仮名にマッチ!」というのにも応用できると思うのですが、なかなかうまく行きません。
 是非、そのやり方やヒントをおしえてください。

 マルチバイト対応なので[ぁ-ん]のような形で表記できます。またPerl互換(preg_match)で作っているので、Perlに詳しい方も是非是非おしえてください。

Aベストアンサー

行頭と行末を入れてみよう。
http://crocro.com/pc/write/hide/chimarl09_01.html#03

Q福岡ドームやスペースワールド

来月に福岡ドームに行きます。
2日目にスペースワールドに行こうと思うのですが、この2つは近いですか?ホテルはどこら辺にとるのがオススメでしょうか。
また、ディズニーのプランとかは見ますがスペースワールドのツアプランとかはありますか?

Aベストアンサー

福岡ドームに何時に行かれるのかにもよりますが、
初日に福岡ドームと市内観光、屋台など満喫して福岡市内に宿泊。
次の日の移動を考えて宿泊は博多駅周辺。
翌朝早起きして博多駅からスペースワールド。
「JR九州」のHPで調べられます。
http://www.jrkyushu.co.jp/

スペースワールドはディズニーランドほどの規模はないので、普通の遊園地程度に考えてもらっていいと思います。

Q正規表現で全角ひらがなを判断

入力画面から確認画面へPOSTで値を渡すときに、
あるPOSTデータを全角ひらがなチェックをかけ判定したいのですが、
全角ひらがなの判別方法がわかりません。

どなたがご存知の方がいらっしゃれば、ご回答頂けると助かります。

Aベストアンサー

正規表現でチェックします。mb_ereg、またはpreg_matchを利用して下さい。
全角ひらがなの正規表現文字クラスは
[ぁ-ゞ]
となります。POSTされて来た文字コード、PHPの文字コード、内部文字コード等の指定が違っているとうまく動かない可能性がありますので気をつけて下さい。なお、ユニコードの場合はpreg_matchの場合はオプションの u をつけます。


if( preg_match("/^[ぁ-ゞ]*$/u",$_POST["aa"])){
//全角ひらがなのみ
}else{
//全角ひらがな以外の文字が混じっている
}

http://jp.php.net/preg_match

Q北九州のスペースワールド

来月、友人たちとスペースワールドへ行く予定です。
皆さんが持っている、スペースワールド情報を教えてください。
 このアトラクションは、この位置の席に乗るといい。
 おすすめの食べ物はコレ。

協力お待ちしています。

Aベストアンサー

惑星アクアは楽しいですが、かなり濡れます(笑)
ちょっと勿体無くても、レインコート(確か100円)を買ったほうが無難...
天気がメチャ良ければ、濡れても乾いちゃうかもしれないですけどね☆
わたしはスペースワールドに行くと、必ず惑星アクアとヴィーナスに乗ります(*^-^*)

参考URL:http://www.spaceworld.co.jp/attraction/4_03.html

Q正規表現、文末のスペース削除

初心者です。

4つ知りたいことがあります。
行頭のスペースまたはタブを削除する方法
行末のスペースまたはタブを削除する方法
行の最後にカンマを付ける
特定の文字後にカンマを付ける

お忙しい中恐縮ですが、よろしくお願いします。

Aベストアンサー

>行頭のスペースまたはタブを削除する方法

$pattern="/^\s+/m";
$replacement="";
$str=preg_replacement($pattern,$replacement,$str);

>行末のスペースまたはタブを削除する方法

$pattern="/\s+$/m";
$replacement="";
$str=preg_replacement($pattern,$replacement,$str);

>行の最後にカンマを付ける

$pattern="/$/m";
$replacement=",";
$str=preg_replacement($pattern,$replacement,$str);

>特定の文字後にカンマを付ける

$pattern="/特定の文字/m";
$replacement="$,";
$str=preg_replacement($pattern,$replacement,$str);

ただし特定の文字は所定のエスケープ処理が必要になるかもしれません。

Qスペースワールド周辺の観光について教えてください

小学生の子供を連れて北九州に家族旅行に行きます。スペースワールドの近くに2泊する予定です。昼ごろには現地に着く予定です。
1日目:午後から夕方まで時間あり
2日目:スペースワールド
3日目:朝から昼ごろまで時間あり
1日目と3日目の過ごし方を検討中です。アドバイスを下さい。
大宰府天満宮、門司港に行くことは可能でしょうか?スペースワールド駅から門司港はJRが良いような書き込みはみましたが、どうでしょう?門司港での楽しみ方も是非教えてください。

Aベストアンサー

調べてみましたが、
快速を利用して33分 450円のようです。
スペースワールド駅の快速停車率は
あまり高くないはずなので、
一度八幡駅や、九工大前にて快速に乗り換えたり
小倉駅止まりや下関行きと門司港行きがあるので
小倉駅で乗り換えの必要もあるかと思います。

一時間ちょっとみておけば
間違いないでしょう。
事前に、ある程度快速の時間や、乗り換えの必要性を
確認しておいた方がいいかと思います。

あと唐戸市場から下関駅は少し離れていますが
歩いて行ける距離ではあるので
帰りは、下関からJRに乗ってもいいかもしれませんね。
渡船喜ぶといいですね。

Qphpの正規表現でカタカナ+スペース+カタカナ

phpの正規表現で全角カタカナ+全角スペース+全角カタカナ
というパターンを取り出したいのですが、
上手く取り出すことが出来ずに困っております。

どなたかご教授ください。
よろしくお願いいたします。

Aベストアンサー

<?PHP
$str="あい うえアイ ウエあい ウエ オカ キク ケコ";
$pattern="/[ァ-ンー]+ +[ァ-ンー]+/u";
preg_match_all($pattern,$str,$matches);
print_r($matches);

みたいなかんじ(UTF8限定)

Qスペースワールドから・・・

スペースワールドから・・・
ゴールデンウィークに、スペースワールドから車で、別府まで行きたいと思います。
車で行く場合、全て高速を通るルートと、国道10号を通るルートでは、どちらがオススメですか?
又、この2つ以外にオススメがあれば教えてください。
よろしくお願いします。

Aベストアンサー

スペースワールド~別府間のルート3つ考えられます

(1)西回り高速ルート (約210KM)
(2)南下一般道高速併用ルート (約115KM)
(3)南下全て一般道ルート (約125KM)

(1)料金は枝光ICから別府ICまでの一般料金で4700円

(2)は都市高速、椎田道路、宇佐IC~別府ICの一般料金で2000円
小倉東IC~苅田北九州空港ICは平日だと一般との差が10分も違わないので
加算していません。もし利用するなら450円追加になります。

どのルートも一長一短ありますからね。

質問者さんがETCカード使用予定で、あちこち乗入れするのが面倒臭く
渋滞を少しでも避けたい、少しでも早くと思われるなら(1)が無難だと思います。

GW期間の日中に関して考えるなら(3)一般道ルートは渋滞箇所がいくつも出てきて
時間的ロスがかなり激しくなると思いますのであまりお勧めは出来ません。
個人的には平日夜間なら(3)なんですけね。

Q全角スペースを半角スペースに変換

$str = mb_convert_kana($usersearch, "s", "EUC-JP");
$usersearch= $_POST['usersearch'];

上記のソースを記述し、htmlのテキストボックス(usersearch)内にある全角スペースを半角にしようと試みるのですが、上手く変換されません。何か解決策はないでしょうか??


全体的にはこのようなソースです。
$search_query = "select * from kensaku2";
$str = mb_convert_kana($usersearch, "s", "EUC-JP");
$usersearch= $_POST['usersearch'];
$clean_search = str_replace(',', ' ', $usersearch);
$search_words = explode(' ', $clean_search);
$final_search_words = array();
if (count($search_words) > 0) {
foreach ($search_words as $word) {
if (!empty($word)) {
$final_search_words[] = $word;
}
}
}

// Generate a WHERE clause using all of the search keywords
$where_list = array();
if (count($final_search_words) > 0) {
foreach($final_search_words as $word) {
$where_list[] = "syou LIKE '%$word%'";
}
}
$where_clause = implode(' AND ', $where_list);

// Add the keyword WHERE clause to the search query
if (!empty($where_clause)) {
$search_query .= " WHERE $where_clause";
}
よろしくお願いいたします。

$str = mb_convert_kana($usersearch, "s", "EUC-JP");
$usersearch= $_POST['usersearch'];

上記のソースを記述し、htmlのテキストボックス(usersearch)内にある全角スペースを半角にしようと試みるのですが、上手く変換されません。何か解決策はないでしょうか??


全体的にはこのようなソースです。
$search_query = "select * from kensaku2";
$str = mb_convert_kana($usersearch, "s", "EUC-JP");
$usersearch= $_POST['usersearch'];
$clean_search = str_replace(',', ' ', $usersearch);
$s...続きを読む

Aベストアンサー

真剣に読んでないので適当な回答ですが

>$str = mb_convert_kana($usersearch, "s", "EUC-JP");
>$usersearch= $_POST['usersearch'];

と書いているなら、$strってなに?って気がしますが・・・


人気Q&Aランキング