スレッド表示 | フラット表示〕 全トピック 920 件中 440 番目 次≫ ≪前

正規表現でのエンマーク検索

created: 2005-04-25 12:41 | modified: 2005-04-26 11:13 | reply: 4

[2260] 正規表現でのエンマーク検索

user: kumiko | created: 2005-04-25 12:41
正規表現について質問させていただきます。

下記コードで入力チェックを行っています。
----------------------------------------
$aaa = ashita_kyou.co-jp
ERegI("^([-\_\.[:alnum:]]+$)",$aaa));
----------------------------------------

この正規表現の想定としては
ハイフン、アンダーバー、ピリオド(全て半角)
半角英数字の場合はOKとなり、それ以外の場合はNGとなる。です。

ただこの正規表現ですと、「\」エンマークが含まれていても
OKとなってしまいます。
「\」をNGとするためには、上記の正規表現に何を追加すればよいでしょうか?

どなたかご指導ください。
よろしくお願いいたします。
reply: 2261 2262 返信 編集 削除

[2261] PCRE系ですが。

user: ゆうじ | created: 2005-04-25 23:47
POSIX系正規表現がわかりませんので
PCRE系正規表現のpreg_matchで・・・。

preg_match("/^([-\_\.[:alnum:]]+$)/i", $aaa);
Parent: 2260  返信 編集 削除

[2262] PHPのeregiが………

user: | created: 2005-04-26 09:27
こんにちは。

ほんとですね、バックスラッシュもマッチしてしまいます。
なんでだ?って感じですね…。
これはどうもPHPのeregの動作(バックスラッシュの扱い)自体が
おかしいという気がします。
(どうやら、“\.”とか“\_”の部分の\にマッチしてしまうようです。
 これっておかしいですよねぇ。)

--------------------

eregiを使わずに、ゆうじさんの書かれた

preg_match("/^([-\_\.[:alnum:]]+$)/i", $aaa)

か、あるいは、マルチバイト系の

mberegi("^([-\_\.[:alnum:]]+$)",$aaa)

を使えば期待通りの動作をしてくれるようです。

--------------------

または、eregiを使うならば、“\.”部分を文字コード指定にして

eregi("^([-_\x2e[:alnum:]]+$)",$aaa)

とすればバックスラッシュにはマッチしないようです。
(アンダースコアはもともとエスケープしなくても
 いいのではないでしょうか)

--------------------


//このへんのeregの動作について、詳しい情報をご存じの方が
//いらしたら、追加レスよろしくお願いします!
Parent: 2260  reply: 2263 返信 編集 削除

[2263] 確認できました

user: kumiko | created: 2005-04-26 11:12
ゆうじさん、猫さん、ありがとうございます。
お二人のやり方で動作確認できました。

でもやはりeregの動きは少し変?
追加レスもチェックしていきます。
でもひとまず仕事が先に進みます。ありがとうございました。
Parent: 2262  reply: 2264 返信 編集 削除

[2264] すみません・・・

user: kumiko | created: 2005-04-26 11:13
猫さん・・・じゃなくて箱さんでした。。
読み間違えました。
大変失礼いたしました。。申し訳ありませんm(_ _)m
Parent: 2263  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 440 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑