文字列チェック - umemura - 09-26-2011
文字列の検証として、バイト数、半角・全角、数字、英数字などを行うにはどうすればいいのでしょうか。
数値チェックとはNumericValidatorを利用すればよさそうですが・・・。
RE: 文字列チェック - onyo - 09-26-2011
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}
}
}
}
}
RE: 文字列チェック - usami - 09-26-2011
バイト数に関しては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}
RE: 文字列チェック - umemura - 07-03-2013
数値型かどうかを調べるには number? プロシージャを利用すればよさそうですね。
|