星期二, 十月 09, 2007

JavaScript で日本語文字を1つづつ切り出す

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis">
<TITLE>文字の切り出し練習</TITLE>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function cutLetter(targetstring,targetindex,targetlength){
var i = 0;
var j = 0;
var k = 0;
var l = '漢';

var targetstring = document.myform.txt1.value;
var targetindex = parseInt(document.myform.txt2.value);
var targetlength = parseInt(document.myform.txt3.value);

if (l.length == 2){
j = 0;
for (i=0;i<targetindex;i++){
l = escape(targetstring.substring(j,j+1)).substring(1,2);
if (l=='8'||l=='9'||l=='E'||l=='F')
j += 2;
else
j += 1;
}
k = j;
for (i=0;i<targetlength;i++){
l = escape(targetstring.substring(k,k+1)).substring(1,2);
if (l=='8'||l=='9'||l=='E'||l=='F')
k += 2;
else
k += 1;
}
} else {
j = targetindex;
k = parseInt(targetindex) + parseInt(targetlength);
}
l = targetstring.substring(j,k);
document.myform.txt4.value = l;
return false;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM name="myform">
<H1>文字の切り出し練習</H1>
 文字列:<INPUT type="text" name="txt1" value="" size=70 maxlength="256"><BR>
 切り出し開始位置:<INPUT type="text" name="txt2" value="0" size=5 maxlength=5> 
 切り出し文字数:<INPUT type="text" name="txt3" value="1" size=5 maxlength=5>
 <INPUT type="button" name="btn1" value="実行" onClick="cutLetter()"><BR><BR>
 ===> 切り出し文字列:<INPUT type="text" name="txt4" value="" size=70 maxlength="256">
</FORM>
</BODY>
</HTML>

Perl打印整个画面时候

用Perl开发Web的时候,使用Perl打印出整个画面的时候,一些特殊符号需要注意
' " \ $ @

string.replace(/’/g,'\\\'');
string.replace(/”/g,'\\\"');
string.replace(/¥/g,'\\\\');
string.replace(/$/g,'\\\$');
string.replace(/@/g,'\\\@');

Javascript Function : escape()

escape(string)

ASCII Table

The top-level function, escape, encodes the string that is contained in the string argument to make it portable. A string is considered portable if it can be transmitted across any network to any computer that supports ASCII characters.

To make a string portable, characters other than the following 69 ASCII characters must be encoded:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1234567890
@*-_+./

All other characters are converted either to their two digit (%xx) or four digit (%uxxxx) hexadecimal equivalent (refered to as the character's "hexadecimal escape sequence"). For example, a blank space will be represented by %20 and a semicolon by %3B. (Note that the hexadecimal numbers are: 0123456789ABCDEF).

星期日, 十月 07, 2007

全角⇔半角変換 VBscript

//全角半角変換用文字列定数

Const FullKana = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワ゛゜";
Const HalfKana = "。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚";

Const FullKana2 = "ヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ";
Const HalfKana2 = "ヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ";

Const FullAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
Const HalfAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

Const FullNumber = "0123456789";
Const HalfNumber = "0123456789";

Const FullSymbol = " !”#$%&’()*+,-./:;<=>?@[¥]^_‘{|}~";
Const HalfSymbol = " !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~";

//大文字小文字変換用文字列定数

Const UpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
Const LowerCase = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";

//ひらがなカタカナ変換用文字列定数
Const HiraKana = "をぁぃぅぇぉゃゅょっあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわんゐゑ";
Const HiraKana2= "がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ";
Const HiraKana3= "う゛";

Const KataKana = "ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワンヰヱ";
Const KataKana2= "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ";
Const KataKana3= "ヴ";
Const KataKana4= "ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン";
Const KataKana5= "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ";


Function TranslateString(OriginalString, strSource, strDestination)
Dim strResult
strResult = OriginalString

Dim nLength
nLength = Len(strSource)
Dim i
For i = 1 To nLength
strResult = Replace(strResult, Mid(strSource, i, 1), Mid(strDestination, i, 1))
Next

TranslateString = strResult
End Function

Function EncodeWKana(OriginalString)
Dim strResult
strResult = OriginalString
If chkWKana.checked Then

strResult = TranslateString(strResult, FullKana, HalfKana)

Dim nLength
nLength = Len(FullKana2)
Dim i
For i = 1 To nLength
strResult = Replace(strResult, Mid(FullKana2, i, 1), Mid(HalfKana2, ((i -1) *2) +1, 2))
Next

End If
EncodeWKana = strResult
End Function

Function EncodeWAlphabet(OriginalString)
Dim strResult
strResult = OriginalString
If chkWAlphabet.checked Then
strResult = TranslateString(strResult, FullAlphabet, HalfAlphabet)
End If
EncodeWAlphabet = strResult
End Function

Function EncodeWNumber(OriginalString)
Dim strResult
strResult = OriginalString
If chkWNumber.checked Then
strResult = TranslateString(strResult, FullNumber, HalfNumber)
End If
EncodeWNumber = strResult
End Function

Function EncodeWSymbol(OriginalString)
Dim strResult
strResult = OriginalString
If chkWSymbol.checked Then
strResult = TranslateString(strResult, FullSymbol, HalfSymbol)
End If
EncodeWSymbol = strResult
End Function

Function EncodeCase(OriginalString)
Dim strResult
strResult = OriginalString
If chkCase.checked Then
strResult = TranslateString(strResult, UpperCase, LowerCase)
End If
EncodeCase = strResult
End Function

Function EncodeKana(OriginalString)
Dim strResult
strResult = OriginalString
If chkKana.checked Then

strResult = Replace(strResult, HiraKana3, KanaKana3)
strResult = TranslateString(strResult, HiraKana, KataKana)
strResult = TranslateString(strResult, HiraKana2, KataKana2)

End If
EncodeKana = strResult
End Function

Function DecodeWKana(OriginalString)
Dim strResult
strResult = OriginalString
If chkWKana.checked Then

Dim nLength
nLength = Len(FullKana2)
Dim i
For i = 1 To nLength
strResult = Replace(strResult, Mid(HalfKana2, ((i -1) *2) +1, 2), Mid(FullKana2, i, 1))
Next

strResult = TranslateString(strResult, HalfKana, FullKana)

End If
DecodeWKana = strResult
End Function

Function DecodeWAlphabet(OriginalString)
Dim strResult
strResult = OriginalString
If chkWAlphabet.checked Then
strResult = TranslateString(strResult, HalfAlphabet, FullAlphabet)
End If
DecodeWAlphabet = strResult
End Function

Function DecodeWNumber(OriginalString)
Dim strResult
strResult = OriginalString
If chkWNumber.checked Then
strResult = TranslateString(strResult, HalfNumber, FullNumber)
End If
DecodeWNumber = strResult
End Function

Function DecodeWSymbol(OriginalString)
Dim strResult
strResult = OriginalString
If chkWSymbol.checked Then
strResult = TranslateString(strResult, HalfSymbol, FullSymbol)
End If
DecodeWSymbol = strResult
End Function

Function DecodeCase(OriginalString)
Dim strResult
strResult = OriginalString
If chkCase.checked Then
strResult = TranslateString(strResult, LowerCase, UpperCase)
End If
DecodeCase = strResult
End Function

Function DecodeKana(OriginalString)
Dim strResult
strResult = OriginalString
If chkKana.checked Then

Dim nLength
nLength = Len(HiraKana2)
Dim i
For i = 1 To nLength
strResult = Replace(strResult, Mid(KataKana5, ((i -1) *2) +1, 2), Mid(HiraKana2, i, 1))
Next

strResult = TranslateString(strResult, KataKana, HiraKana)
strResult = TranslateString(strResult, KataKana2, HiraKana2)
strResult = Replace(strResult, KanaKana3, HiraKana3)
strResult = TranslateString(strResult, KataKana4, HiraKana)

End If
DecodeKana = strResult
End Function

Function EncodeString(OriginalString)
Dim strResult
strResult = OriginalString
strResult = EncodeCase(strResult)
strResult = EncodeKana(strResult)
strResult = EncodeWKana(strResult)
strResult = EncodeWAlphabet(strResult)
strResult = EncodeWNumber(strResult)
strResult = EncodeWSymbol(strResult)
EncodeString = strResult
End Function

Function DecodeString(OriginalString)
Dim strResult
strResult = OriginalString
strResult = DecodeWKana(strResult)
strResult = DecodeWAlphabet(strResult)
strResult = DecodeWNumber(strResult)
strResult = DecodeWSymbol(strResult)
strResult = DecodeCase(strResult)
strResult = DecodeKana(strResult)
DecodeString = strResult
End Function

入力チェックについて方法もありますよ

Javascript trim

/**
*
* Javascript trim, ltrim, rtrim
* http://www.webtoolkit.info/
*
*
**/

function trim(str, chars) {
return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
chars = chars || "\\s";
return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
chars = chars || "\\s";
return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}


三种方法

Javascript sprintf

Several programming languages implement a sprintf function, to output a formatted string. It originated from the C programming language, printf function. Its a string manipulation function.

This is limited sprintf Javascript implementation. Function returns a string formatted by the usual printf conventions. See below for more details. You must specify the string and how to format the variables in it. Possible format values:

%% - Returns a percent sign
%b - Binary number
%c - The character according to the ASCII value
%d - Signed decimal number
%f - Floating-point number
%o - Octal number
%s - String
%x - Hexadecimal number (lowercase letters)
%X - Hexadecimal number (uppercase letters)
Additional format values. These are placed between the % and the letter (example %.2f):

+ (Forces both + and - in front of numbers. By default, only negative numbers are marked)
- (Left-justifies the variable value)
0 zero will be used for padding the results to the right string size
[0-9] (Specifies the minimum width held of to the variable value)
.[0-9] (Specifies the number of decimal digits or maximum string length)
If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag), and use Javascript UTF-8 utility found on this website.




/**
*
* Javascript sprintf
* http://www.webtoolkit.info/
*
*
**/

sprintfWrapper = {

init : function () {

if (typeof arguments == "undefined") { return null; }
if (arguments.length < 1) { return null; }
if (typeof arguments[0] != "string") { return null; }
if (typeof RegExp == "undefined") { return null; }

var string = arguments[0];
var exp = new RegExp(/(%([%]|(\-)?(\+|\x20)?(0)?(\d+)?(\.(\d)?)?([bcdfosxX])))/g);
var matches = new Array();
var strings = new Array();
var convCount = 0;
var stringPosStart = 0;
var stringPosEnd = 0;
var matchPosEnd = 0;
var newString = '';
var match = null;

while (match = exp.exec(string)) {
if (match[9]) { convCount += 1; }

stringPosStart = matchPosEnd;
stringPosEnd = exp.lastIndex - match[0].length;
strings[strings.length] = string.substring(stringPosStart, stringPosEnd);

matchPosEnd = exp.lastIndex;
matches[matches.length] = {
match: match[0],
left: match[3] ? true : false,
sign: match[4] || '',
pad: match[5] || ' ',
min: match[6] || 0,
precision: match[8],
code: match[9] || '%',
negative: parseInt(arguments[convCount]) < 0 ? true : false,
argument: String(arguments[convCount])
};
}
strings[strings.length] = string.substring(matchPosEnd);

if (matches.length == 0) { return string; }
if ((arguments.length - 1) < convCount) { return null; }

var code = null;
var match = null;
var i = null;

for (i=0; i<matches.length; i++) {

if (matches[i].code == '%') { substitution = '%' }
else if (matches[i].code == 'b') {
matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
substitution = sprintfWrapper.convert(matches[i], true);
}
else if (matches[i].code == 'c') {
matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
substitution = sprintfWrapper.convert(matches[i], true);
}
else if (matches[i].code == 'd') {
matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
substitution = sprintfWrapper.convert(matches[i]);
}
else if (matches[i].code == 'f') {
matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ? matches[i].precision : 6));
substitution = sprintfWrapper.convert(matches[i]);
}
else if (matches[i].code == 'o') {
matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
substitution = sprintfWrapper.convert(matches[i]);
}
else if (matches[i].code == 's') {
matches[i].argument = matches[i].argument.substring(0, matches[i].precision ? matches[i].precision : matches[i].argument.length)
substitution = sprintfWrapper.convert(matches[i], true);
}
else if (matches[i].code == 'x') {
matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
substitution = sprintfWrapper.convert(matches[i]);
}
else if (matches[i].code == 'X') {
matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
substitution = sprintfWrapper.convert(matches[i]).toUpperCase();
}
else {
substitution = matches[i].match;
}

newString += strings[i];
newString += substitution;

}
newString += strings[i];

return newString;

},

convert : function(match, nosign){
if (nosign) {
match.sign = '';
} else {
match.sign = match.negative ? '-' : match.sign;
}
var l = match.min - match.argument.length + 1 - match.sign.length;
var pad = new Array(l < 0 ? 0 : l).join(match.pad);
if (!match.left) {
if (match.pad == "0" || nosign) {
return match.sign + pad + match.argument;
} else {
return pad + match.sign + match.argument;
}
} else {
if (match.pad == "0" || nosign) {
return match.sign + match.argument + pad.replace(/0/g, ' ');
} else {
return match.sign + match.argument + pad;
}
}
}
}

sprintf = sprintfWrapper.init;

Javascript string pad

This functions returns the input string padded on the left, the right, or both sides to the specified padding length. If the optional argument "pad" is not supplied, the input is padded with spaces, otherwise it is padded with characters from "pad" up to the "len" length.


/**
*
* Javascript string pad
* http://www.webtoolkit.info/
*
**/

var STR_PAD_LEFT = 1;
var STR_PAD_RIGHT = 2;
var STR_PAD_BOTH = 3;

function pad(str, len, pad, dir) {

if (typeof(len) == "undefined") { var len = 0; }
if (typeof(pad) == "undefined") { var pad = ' '; }
if (typeof(dir) == "undefined") { var dir = STR_PAD_RIGHT; }

if (len + 1 >= str.length) {

switch (dir){

case STR_PAD_LEFT:
str = Array(len + 1 - str.length).join(pad) + str;
break;

case STR_PAD_BOTH:
var right = Math.ceil((padlen = len - str.length) / 2);
var left = padlen - right;
str = Array(left+1).join(pad) + str + Array(right+1).join(pad);
break;

default:
str = str + Array(len + 1 - str.length).join(pad);
break;

} // switch

}

return str;

}