会員入会処理があるのでパスワードを入力させているのですが、半角英数字以外の入力に対してエラーを返すため、以下の処理を行っています。
if( !(mb_ereg(’[^0-9a-zA-Z]’, $_POST[’newpassword’])) )
{
error( ”パスワードにひらがな・カタカナ・漢字・記号が含まれている可能性があります。” );
exit();
}
しかし実際テストしてみるとこのチェックに引っかかりません。
入力時、パスワード欄(input type=”password”)に「あ」と入力するとアスタリスクが2個表示されるところを見ると、1バイトずつに分解してデータを受け取っているような気がします。
また、AUなどでは「input type=”password”」が無効になっているんでしょうか…
どうぞよろしく。
PHP: マルチバイト文字列関数(mbstring) - Manual
正規表現が「0-9a-zA-Z*以外*」,if文条件が「ではない(not)になっているため,
「0-9a-zA-Z」の場合は条件を実行という風になっています.
if( !(mb_ereg(’[0-9a-zA-Z]’, $_POST[’newpassword’])) )
か
if( (mb_ereg(’[^0-9a-zA-Z]’, $_POST[’newpassword’])) )
でしょう.
if(!ereg(”^([0-9a-zA-Z])”, $_POST[’newpassword’])){
//エラー処理
かなぁ?間違っていたらごめんなさい。
if (!preg_match(”/^[a-zA-Z0-9]+$/”, $_POST[’newpassword’])) {
エラー処理
}
でどうでしょうか?
http://www.au.kddi.com/ezfactory/index.html
KDDI au: EZfactory
PCで行った場合、
<?php
if (mb_ereg(”[0-9a-zA-Z]”, $_POST[”newpassword”])) {
print(”Check OK”);
} else {
print(”Check False”);
}
?>
以上のようなスクリプトで振り分けることができました。
(参考:mbstringの値は、
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input pass pass
mbstring.http_output pass pass
mbstring.internal_encoding no value no value
mbstring.language neutral neutral
mbstring.substitute_character no value no value
でデフォルトのままです。)
気になる点は、上記でも述べられていた、”!”がある点と、
”’”が大文字になっている点ですが、プログラム自体はあっていると思います。
あとは、携帯での都合ですが(PCの”type=password”では、ひらがなも一文字です)
一言にAUといっても、XHTML or HDML と二種類あって、機種によってはHTMLは自動的に
HDMLに変換されたりもします。
同じ会社でも古い機種と新しい機種で違うので調べてみてください。
参考までに、AUのEZwebのサイトを載せておきます。
http://www.au.kddi.com/ezfactory/tec/spec/html_con003_2.html#pas...
KDDI au: 入力フォーム変換仕様 > <input type="password">/<input type="radio">/<input type="checkbox">
ありがとうございました。
もうちょい考えて見ます。