数値から始まり、Yを1字以上含むものをPHPで判別させたいです。
・最初の数値は「1~9」を扱いたいです。
・2番目に数値がくることはありません。
・使う文字は、数値・英字・日本語文字列・漢字・記号などあらゆる文字です。
・使う文字は全て全角半角の両方に対応
・全体的な数値と文字列の割合はバラバラです。
・空白から始まっても×
・文字数制限は特にありません。
たとえば「3」から始まり「e」を含むとき
3eiklあいうeE(←○)
4yyte(←3から始まっていない×)
3rrEき134(←○)
Eresry(←3から始まっていない×)
3我Ea(←○)
3aaaa(←eがない×)
3e(←○)
5Eお(←3から始まっていない×)
3E(←○)
3 E(←○)
3E(←空白から始まっている×)
$str = $_GET["s"]; //3我Ea
if($str{0}=="1" || $str{0}=="1"){$pattern = '/^(1|1)*.(Y|y)/';}
・・・
if($str{0}=="9" || $str{0}=="9"){$pattern = '/^(9|9)*.(Y|y)/';}
if (preg_match($pattern, $str)) {
echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8')."は○";
} else {
echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8')."は×";
}
うまくいきません。どのようにしたら良いでしょうか。
No.1ベストアンサー
- 回答日時:
こんな感じです
<?php
mb_internal_encoding("UTF8");
$a=array("3eiklあいうeE","4yyte","3rrEき134","Eresry","3我Ea","3aaaa","3e","5Eお","3E","3 E"," 3E");
$pattern="/^[33].*[ee]/i";
foreach($a as $val){
print $val;
if(preg_match($pattern,$val)){
print "=>〇<br>";
}else{
print "=>×<br>";
}
}
?>
回答ありがとうございます。
<?php
mb_internal_encoding("UTF8");
$a=array("3eiklあいうeE","4yyte","3rrEき134","Eresry","3我Ea","3aaaa","3e","5Eお","3E","3 E"," 3E");
$pattern="/^[33].*[yy]/i";
foreach($a as $val){
print $val;
if(preg_match($pattern,$val)){
print "=>〇<br>";
}else{
print "=>×<br>";
}
}
?>
eeの場合は正しく結果が出ましたが、
yyやkkにしてみるとしっかり動きませんでした。
3eiklあいうeE=>〇
4yyte=>×
3rrEき134=>〇
Eresry=>×
3我Ea=>×
3aaaa=>×
3e=>〇
5Eお=>×
3E=>〇
3 E=>×
3E=>×
No.4
- 回答日時:
対象文字列がマルチバイト文字であれば、mb_regex_encoding('utf-8') + mb_ereg_match の方がいいのでは?
http://jp2.php.net/manual/ja/function.mb-ereg-ma …
というか、このくらいの判定なら、正規表現にこだわらないほうが楽じゃないですかねぇ。
function str_check($str, $chk1='3', $chk2='Y') {
if (mb_substr($str,0,1) !== $chk1) { return false; }
if (mb_strpos($str, $chk2) === false) { return false; }
return true;
}
mb_substrやmb_strposは(指定しなければ)mb_internal_encodingに従います。
こういうやり方もできるのですね。
でも、大文字に対応させるには追加必要ですね。
こちらも参考にさせて頂きます。
ありがとうございます。
No.2
- 回答日時:
ああ、ごめんなさい
修飾子は「ui」ですね
$pattern="/^[33].*[ee]/ui";
すみません。
Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 3 in
が物凄く出てきます。php5.2を使っていますがバージョンと関係ありますか?
<?php
mb_internal_encoding("UTF8");
$a=array("3eiklあいうeE","4yyte","3rrEき134","Eresry","3我Ea","3aaaa","3e","5Eお","3E","3 E"," 3E");
$pattern="/^[33].*[yy]/ui";
foreach($a as $val){
print $val;
if(preg_match($pattern,$val)){
print "=>〇<br>";
}else{
print "=>×<br>";
}
}
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL Serverで文字コードUTF-8
-
ファイル名がUTF-8のファイルを...
-
文字化け変換方法
-
セッションが文字化け、エンコ...
-
UTC-8→SJISで文字化け
-
送信したメールのタイトルが無...
-
UTF8メールがLotus Notesで文字...
-
htmlはSJIS PHPはEUC mb_conv...
-
mb_send_mailでUTF8なメールを...
-
SJISで取得した半角カナをUTF-8...
-
【PHP】半角「\\」を全角「...
-
PHP mb_convert_encoding sjis...
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
メッセージボックスで1025文字...
-
文字の入力で横バー上段、中断...
-
エクセルのCOUNTIFが正しくカウ...
-
正規表現で自動リンク後、長いU...
-
エスケープ文字の復帰(¥r)と...
-
全角括弧と全角読点の間隔を狭...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
UTF8メールがLotus Notesで文字...
-
PHP+Postgres 「髙」が文字化け
-
phpMyAdmin内での文字化け
-
SJISで取得した半角カナをUTF-8...
-
PHPmailerでの添付ファイルの文...
-
SJIS→UTF-8変換後の文字化けに...
-
SQL Serverで文字コードUTF-8
-
includeファイルの文字コードに...
-
PHPのsendmailでの文字化けにつ...
-
mb_strposについて予定外の結果...
-
「あ」→「82A0」のようにshift-...
-
mb_send_mailの2重投稿を防止し...
-
multipart/form-dataの文字化け
-
PHPスクリプトでエンコードエラー
-
IMAP関数で取得した文字列の、...
-
メールのCCに複数のアドレスを...
-
メール題名の文字化け
-
自動返信メールへの画像添付
-
mb_regex_encodingでエンコード...
おすすめ情報