Thread Rating:
  • 338 Vote(s) - 2.79 Average
  • 1
  • 2
  • 3
  • 4
  • 5
文字列チェック
09-26-2011, 12:23 PM,
#1
文字列チェック
文字列の検証として、バイト数、半角・全角、数字、英数字などを行うにはどうすればいいのでしょうか。

数値チェックとはNumericValidatorを利用すればよさそうですが・・・。
Reply
09-26-2011, 02:00 PM, (This post was last modified: 09-27-2011, 05:04 PM by onyo.)
#2
RE: 文字列チェック
umemura の口様

(09-26-2011, 12:23 PM)umemura Wrote: 文字列の検証として、バイト数、半角・全角、数字、英数字などを行うにはどうすればいいのでしょうか。 数値チェックとはNumericValidatorを利用すればよさそうですが・・・。
regexp-subst プロシージャ で範囲指定してあげるのが簡単かと思います。
自分の場合バイトチェックは encode-characters を使用しました。
サンプルをのっけときます。

Code:
{import * from CURL.LANGUAGE.REGEXP}
|| 必須チェック
{define-proc public {must-check value:String, must:bool, trim-clone?:bool}:String
    {if trim-clone? then
        {if (must == true and {value.trim-clone} == "") then
            {return "必須入力です。"}
        }
     else
        {if (must == true and value == "") then
            {return "必須入力です。"}
        }
    }
    {return ""}
}

|| 全角ONLYチェック
{define-proc  {is-only-zenkaku in:String, max-chars:int, must:bool, trim-clone?:bool}:String
    
    let result:String = {must-check in, must, trim-clone?}
    {if result != "" then
        {return result}
    }
    
    {if in != "" then
        let s:String = in
        let exp:String = "[^ -~。-゚]"
        set s = {regexp-subst exp, s, "",replace-all? = true}
        {if s != "" then
            {return "全角文字で入力してください。"}
        }
    }
    let encodeout:ByteVec =
        {ByteVec
            max-size= {value in.size} *
            CharEncoding.ucs2-big-endian.transcode-min-expansion-factor
        }
    let encoding:CharEncoding =
        {get-character-encoding-by-name  "shift-jis"}
    
    let (int-used:int, out-made:int) =
        {encode-characters in, encodeout, encoding}
    
    {if out-made > max-chars then
        {return "サイズオーバーです。"}
    }
    
    {return result}

}
{let tf:TextField = {TextField width = 60pt}}
{VBox
    tf,
    {CommandButton
        label = "CheckValue",
        {on Action do
            let s:String = {is-only-zenkaku tf.value, 10, true, true}
            {if not s.empty? then
                {popup-message s}
            }
        }
    }
}
Reply
09-26-2011, 05:32 PM,
#3
RE: 文字列チェック
バイト数に関してはStringUtilのget-bytesを使用しました。

特殊文字を使わなければこんな感じで判定してます。

Code:
{import * from COM.CURLAP.LIB.LANG}

{let str:String = "11アアaAaA!!\||\\¥"}
{let message:VBox={VBox}}
{for c:char in str do
    || バイト判定
    let bt:int = {StringUtil.get-bytes {String c}}
    let st:String = c & " = "
    || 全角判定
    {if bt == 1 then
        set st = st & "半角,"
     else
        set st = st & "全角,"
    }
    || 数字判定
    {if ((c>='0' and c<='9') or
         (c>='0' and c<='9'))
     then
        set st = st & "数字,"
    }
    || 英字判定
    {if ((c>='A' and c<='Z') or
         (c>='a' and c<='z') or
         (c>='A' and c<='Z') or
         (c>='a' and c<='z'))
     then
        set st = st & "英字,"
     else
        set st = st & "英字以外,"
    }
    set st = st & " " & bt & "バイト"
    {message.add st}

}
{value message}
Reply
07-03-2013, 04:16 PM,
#4
RE: 文字列チェック
数値型かどうかを調べるには number? プロシージャを利用すればよさそうですね。
Reply

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('285')