Mason' Blog

Mason.Net

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理
  33 Posts :: 0 Stories :: 12 Comments :: 1 Trackbacks

公告

2006年2月23日 #

[JavaScript]几种常用的表单输入判断

//函数名:chksafe
//功能介绍:检查是否含有"'",'\\',"/"
//参数说明:要检查的字符串
//返回值:0:是 1:不是
function chksafe(a)
{
return 1;
/* fibdn = new Array ("'" ,"\\", "、", ",", ";", "/");
i=fibdn.length;
j=a.length;
for (ii=0;ii { for (jj=0;jj { temp1=a.charAt(jj);
temp2=fibdn[ii];
if (tem';p1==temp2)
{ return 0; }
}
}
return 1;
*/
}

//函数名:chkspc
//功能介绍:检查是否含有空格
//参数说明:要检查的字符串
//返回值:0:是 1:不是
function chkspc(a)
{
var i=a.length;
var j = 0;
var k = 0;
while (k {
if (a.charAt(k) != " ")
j = j+1;
k = k+1;
}
if (j==0)
{
return 0;
}

if (i!=j)
{ return 2; }
else
{
return 1;
}
}


//函数名:chkemail
//功能介绍:检查是否为Email Address
//参数说明:要检查的字符串
//返回值:0:不是 1:是
function chkemail(a)
{ var i=a.length;
var temp = a.indexOf('@');
var tempd = a.indexOf('.');
if (temp > 1) {
if ((i-temp) > 3){

if ((i-tempd)>0){
return 1;
}

}
}
return 0;
}

//opt1 小数 opt2 负数
//当opt2为1时检查num是否是负数
//当opt1为1时检查num是否是小数
//返回1是正确的,0是错误的
function chknbr(num,opt1,opt2)
{
var i=num.length;
var staus;
//staus用于记录.的个数
status=0;
if ((opt2!=1) && (num.charAt(0)=='-'))
{
//alert("You have enter a invalid number.");
return 0;

}
//当最后一位为.时出错
if (num.charAt(i-1)=='.')
{
//alert("You have enter a invalid number.");
return 0;
}

for (j=0;j {
if (num.charAt(j)=='.')
{
status++;
}
if (status>1)
{
//alert("You have enter a invalid number.");
return 0;
}
if (num.charAt(j)<'0' || num.charAt(j)>'9' )
{
if (((opt1==0) || (num.charAt(j)!='.')) && (j!=0))
{
//alert("You have enter a invalid number.");
return 0;
}
}
}
return 1;
}

//函数名:chkdate
//功能介绍:检查是否为日期
//参数说明:要检查的字符串
//返回值:0:不是日期 1:是日期
function chkdate(datestr)
{
var lthdatestr
if (datestr != "")
lthdatestr= datestr.length ;
else
lthdatestr=0;

var tmpy="";
var tmpm="";
var tmpd="";
//var datestr;
var status;
status=0;
if ( lthdatestr== 0)
return 0


for (i=0;i { if (datestr.charAt(i)== '-')
{
status++;
}
if (status>2)
{
//alert("Invalid format of date!");
return 0;
}
if ((status==0) && (datestr.charAt(i)!='-'))
{
tmpy=tmpy+datestr.charAt(i)
}
if ((status==1) && (datestr.charAt(i)!='-'))
{
tmpm=tmpm+datestr.charAt(i)
}
if ((status==2) && (datestr.charAt(i)!='-'))
{
tmpd=tmpd+datestr.charAt(i)
}

}
year=new String (tmpy);
month=new String (tmpm);
day=new String (tmpd)
//tempdate= new String (year+month+day);
//alert(tempdate);
if ((tmpy.length!=4) || (tmpm.length>2) || (tmpd.length>2))
{
//alert("Invalid format of date!");
return 0;
}
if (!((1<=month) && (12>=month) && (31>=day) && (1<=day)) )
{
//alert ("Invalid month or day!");
return 0;
}
if (!((year % 4)==0) && (month==2) && (day==29))
{
//alert ("This is not a leap year!");
return 0;
}
if ((month<=7) && ((month % 2)==0) && (day>=31))
{
//alert ("This month is a small month!");
return 0;

}
if ((month>=8) && ((month % 2)==1) && (day>=31))
{
//alert ("This month is a small month!");
return 0;
}
if ((month==2) && (day==30))
{
//alert("The Febryary never has this day!");
return 0;
}

return 1;
}

//函数名:fucPWDchk
//功能介绍:检查是否含有非数字或字母
//参数说明:要检查的字符串
//返回值:0:含有 1:全部为数字或字母
function fucPWDchk(str)
{
var strSource ="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var ch;
var i;
var temp;

for (i=0;i<=(str.length-1);i++)
{

ch = str.charAt(i);
temp = strSource.indexOf(ch);
if (temp==-1)
{
return 0;
}
}
if (strSource.indexOf(ch)==-1)
{
return 0;
}
else
{
return 1;
}
}

function jtrim(str)
{ while (str.charAt(0)==" ")
{str=str.substr(1);}
while (str.charAt(str.length-1)==" ")
{str=str.substr(0,str.length-1);}
return(str);
}


//函数名:fucCheckNUM
//功能介绍:检查是否为数字
//参数说明:要检查的数字
//返回值:1为是数字,0为不是数字
function fucCheckNUM(NUM)
{
var i,j,strTemp;
strTemp="0123456789";
if ( NUM.length== 0)
return 0
for (i=0;i {
j=strTemp.indexOf(NUM.charAt(i));
if (j==-1)
{
//说明有字符不是数字
return 0;
}
}
//说明是数字
return 1;
}

//函数名:fucCheckTEL
//功能介绍:检查是否为电话号码
//参数说明:要检查的字符串
//返回值:1为是合法,0为不合法
function fucCheckTEL(TEL)
{
var i,j,strTemp;
strTemp="0123456789-()# ";
for (i=0;i {
j=strTemp.indexOf(TEL.charAt(i));
if (j==-1)
{
//说明有字符不合法
return 0;
}
}
//说明合法
return 1;
}

//函数名:fucCheckLength
//功能介绍:检查字符串的长度
//参数说明:要检查的字符串
//返回值:长度值
function fucCheckLength(strTemp)
{
var i,sum;
sum=0;
for(i=0;i {
if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255))
sum=sum+1;
else
sum=sum+2;
}
return sum;
}

posted @ 2006-02-23 13:27 Mason 阅读(140) 评论(0) 编辑

2006年2月22日 #

原作发表于《程序员》杂志2005年第一期

素材、策划:孟岩

执笔:方茜

(取材自: http://khason.biz/blog/2004/12/why-microsoft-can-blow-off-with-c.html)




C#会前途黯淡,只因大胡子惹的祸?!有点耸人听闻吧。可是色列软件工程师 Tamir Khason自有一套理论(也许他曾学过中国的面相术)得出这样的结论。不信,咱就瞧瞧他发在自己Blog上的一篇文章,看看他有什么样的奇思妙想。

Round 1


Fortran.jpg
John Backus,Fortran之父



Prolog.jpg
Alain Colmerauer, Prolog之父



ada.jpg
Jean Ichbiah, Ada之父


以上三人分别发明了Fortran、 Prolog和 Ada语言。这些语言都有着过人的优点,每一种在当时都可以称得上是创意不凡。很可惜,三个当中没有一个广泛流传。与之相对,下面的Brain Kernighan、Dennis Ritchie和Ken Thompson所“炮制” 出的C和Unix,已经使用了三十年了,也许再用100年也没问题!

C_BK.jpg
C语言宗师Brain Kernighan


C_KT_DR.jpg
UNIX/C创造者Ken Thompson 和 Dennis Ritchie


Round 2

以下两位分别是Alan Kay和Kristen Nygaard。是他们发明了第一批面向对象语言 Smalltalk和Simula 67。不过,这些语言都行之不远。

smalltalk.gif
Smalltalk之父Alan Kay


simula.png
Simula 67之父Kristen Nygaard


Brad Cox,曾尝试把OO加入到C中,于是Objective-C诞生。然而,Objective-C 也是命运不济,目前只有在Mac操作系统中还能看到它的踪影。 与之相对,另一位所做的相同尝试却大红大紫,这就是Bjarne Stroustrup所写的C++。其实,看看 Stroustrup的脸就不难明白为什么这两种语言的命运会如此不同。

objective-c.gif
Objective-C之父Brad Cox


c++.jpg
C++之父Bjarne Stroustrup


到这里,你能猜出点规律来吗?

答案揭晓:有大胡子——有旺运;没胡子——只有干瞪眼!



由此,看看下面两位的胡子,C#和Java究竟鹿死谁手,不就是不言自明的吗?

csharp.jpg
C#之父Anders Hejlsberg


java.jpg
Java之父James Gosling


Round 3

当然,你也可以不信。不过,还有一个例证可以很好地说明。下面两位分别是Basic的作者Thomas Kurtz 与Perl的作者Larri Wall。两人虽然没有令人咋舌的大胡子,但两撇小胡子倒也浓密有致。自然,这两种语言红得发紫。

basic.gif
Thomas Kurtz, Basic之父


perl.jpg
Larry Wall, Perl之父


但是同为动态语言,Python和Ruby的作者Guido van Rossum和松本行弘都没有胡子,哪怕是两撇小胡子,所以尽管它们都比Perl语言好,但都没有Perl使用广泛。不过,凡事都有转机。Rossum看样子极有希望很快长出大胡子,而日本人松本,看样子够呛。

python.jpg
Guido van Rossum, Python之父


ruby1.jpg
松本行弘, Ruby语言之父


————————————————————————————————
更有意思的事情还在后面,松本正巧看到了这个帖子,很不服气,于是便在自己的blog上贴出这幅照片:

ruby2.jpg
松本行弘:谁说俺长不出大胡子?


看来, Ruby还是大有希望的!

后记:从2005年发展的情况来看,Ruby的火爆再次证明的胡子定律的正确性。

posted @ 2006-02-22 09:42 Mason 阅读(152) 评论(2) 编辑

2006年2月14日 #

关于系统数据库的恢复总结如下:  

在SQL Server数据库中,系统信息存储在系统数据库中,主要的系统数据库包括:master-从整体上控制用户数据库和SQL Server操作,在创建了任何用户定义的对象后,都要备份它:
 
model-为新数据库提供模版和原型 

msdb-包含了有关作业、报警及操作员等信息  

如果包含系统数据库的介质变了,那么必须重建系统数据库,如果你仍然可以启动SQL Server服务,则可以通过RESTORE语句从系统数据库的备份中恢复数据库。如果master坏了,不能启动系统,可以按照下面步骤进行恢复:
  
1.重建系统数据库 运行c:mssql7binnrebuildm.exe,按照提示进行即可,过程中需要系统数据库样本的路径,可在安装光盘中找到; 

2.重建系统数据库后,启动SQL Server服务,用系统数据库的备份恢复数据库就行了通常恢复顺序为master->msdb->model在恢复master的备份时要注意:必须在single user模式下进行,有以下几种方法进入单用户模:
 
1.可以在命令行模式下输入sqlservr -c -f -m或者输入sqlservr -m其中:-c 可以缩短启动时间,SQL Server 不作为Windows NT的服务启动-f 用最小配置启动SQL Server-m 单用户模式启动SQL Server
 
2.可以在控制面板-服务-MSSQLServer的启动参数中输入-c -f -m或者输入-m,点击开始 

3.还有一种更灵活的启动方法:用存在注册表里的启动参数启动  

在MSSQLServer项下添加项SingleUser,具体内容如下所示: 

HKEY_LOCAL_MACHINE 
Software 
 Microsoft 
MSSQLServer 
SingleUser 
Parameters 
 SQLArg0 : REG_SZ : -dC:MSSQL7DATAMASTER.DAT 
 SQLArg1 : REG_SZ : -eC:MSSQL7LOGERRORLOG 
 SQLArg2 : REG_SZ : -lC:MSSQL7DATAMASTLOG.DAT 
 SQLArg3 : REG_SZ : -m 

在命令行下输入SQLServr -c -sSingleUser,注意:必须是在命令行下进入单用户模式后启动 Query Analyzer执行语句: 

RESTORE DATABASE master form disk='c:(具体的备份文件名)' 
posted @ 2006-02-14 13:01 Mason 阅读(100) 评论(0) 编辑

 

  以前的服务器,由于内存的价格过高,一般配的内存不是很多,超过4G的当然就不多了.现在的服务器,配置超过4G就很多,在配作SQL 数据库服务器后,很多的人只选默认的设置,虽然可以正常使用,可是却把大量的内存给浪费(SQL服务使用的内存不会超过1.8G),系统的性能也不能因为的大内存而提升,这是很可惜的.

  在本文中,我大致讲一下配置的过程.(如果服务器的内存少于4G,不用配置)(网上完全讲这个的,没有见过,随手写一个)

  1.打开系统中的大内存支持(windows)

  若要启用 Windows 2000 Advanced Server 或 Windows 2000 Datacenter Server 支持

  大于4GB的物理内存,必须将参数 /pae 添加到 boot.ini 文件中。

  [boot loader]

  timeout=0

  default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

  [operating systems]

  multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server"

  /fastdetect

  改为

  [boot loader]

  timeout=0

  default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

  [operating systems]

  multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server"

  /fastdetect /pae

  这个改好后,要重启系统的

  2.启用锁定内存页选项(windows)

  启用锁定内存页选项

  在"开始"菜单上单击"运行"子菜单,然后在"打开"框中键入"gpedit.msc"。

  在"组策略"控制台上,展开"计算机配置",然后展开"Windows 设置"。

  展开"安全设置",然后展开"本地策略"。

  选择"用户权限分配"复选框。

  详细资料窗格中随即显示出策略。

  在详细资料窗格中,双击"锁定内存页"。

  在"本地安全策略设置"对话框中,单击"添加"按钮。

  在"选择用户或组"对话框中,添加有权运行 sqlservr.exe 的帐户。
 

  3.启用SQL的AWE

  若要启用 AWE,请将 awe enabled 设置为 1。除非指定了 max server memory 的值,否

  则 SQL Server 将保留几乎所有可用内存,只留下 128 MB 或更少。

  如果已成功启用该选项,则当 SQL Server 2000 实例启动时,SQL Server 错误日志中将

  出现"已启用地址窗口扩展"这条消息。

  awe enabled 是高级选项。如果正在使用 sp_configure 系统存储过程更改该设置,则只有

  当 show advanced options 设置为 1 时才能更改 awe enabled。

  code 如下,设定SQL 使用6G的内存

  sp_configure 'show advanced options', 1

  RECONFIGURE

  GO

  sp_configure 'awe enabled', 1

  RECONFIGURE

  GO

  sp_configure 'max server memory', 6144

  RECONFIGURE

  GO

  必须重新启动 SQL Server 2000 实例才能使更改生效。

  net stop mssqlserver

  net start mssqlserver

  这样,SQL 服务启动后,就会把6G的内存给锁定,完全供SQL使用

  参照SQL帮助文件

posted @ 2006-02-14 13:01 Mason 阅读(214) 评论(0) 编辑

2006年1月22日 #


/*--用存储过程实现的分页程序

显示指定表、视图、查询结果的第X页

对于表中主键或标识列的情况,直接从原表取数查询,其它情况使用临时表的方法

如果视图或查询结果中有主键,不推荐此方法*/

/*--调用示例

exec p_show '地区资料'

exec p_show '地区资料',5,3,'地区编号,地区名称,助记码','地区编号'

--*/

/*

因为要顾及通用性,所以对带排序的查询语句有一定要求.如果先排序,再出结果.就是:

exec p_show 'select top 100 percent * from 地区资料 order by 地区名称',5,3,'地区编号,地区名称,助记码','地区名称'

--查询语句加上:top 100 percent //top时

*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_show]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[p_show]

GO

CREATE Proc p_show

@QueryStr nvarchar(4000), --表名、视图名、查询语句

@PageSize int=10, --每页的大小(行数)

@PageCurrent int=1, --要显示的页

@FdShow nvarchar (4000)='', --要显示的字段列表,如果查询结果有标识字段,需要指定此值,且不包含标识字段

@FdOrder nvarchar (1000)='' --排序字段列表

as

declare @FdName nvarchar(250) --表中的主键或表、临时表中的标识列名

,@Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号

,@Obj_ID int --对象ID

--表中有复合主键的处理

declare @strfd nvarchar(2000) --复合主键列表

,@strjoin nvarchar(4000) --连接字段

,@strwhere nvarchar(2000) --查询条件

select @Obj_ID=object_id(@QueryStr)

,@FdShow=case isnull(@FdShow,'') when '' then ' *' else ' '+@FdShow end

,@FdOrder=case isnull(@FdOrder,'') when '' then '' else ' order by '+@FdOrder end

,@QueryStr=case when @Obj_ID is not null then ' '+@QueryStr else ' ('+@QueryStr+') a' end

--如果显示第一页,可以直接用top来完成

if @PageCurrent=1

begin

select @Id1=cast(@PageSize as varchar(20))

exec('select top '+@Id1+@FdShow+' from '+@QueryStr+@FdOrder)

return

end

--如果是表,则检查表中是否有标识更或主键

if @Obj_ID is not null and objectproperty(@Obj_ID,'IsTable')=1

begin

select @Id1=cast(@PageSize as varchar(20))

,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20))

select @FdName=name from syscolumns where id=@Obj_ID and status=0x80

if @@rowcount=0 --如果表中无标识列,则检查表中是否有主键

begin

if not exists(select 1 from sysobjects where parent_obj=@Obj_ID and xtype='PK')

goto lbusetemp --如果表中无主键,则用临时表处理

select @FdName=name from syscolumns where id=@Obj_ID and colid in(

select colid from sysindexkeys where @Obj_ID=id and indid in(

select indid from sysindexes where @Obj_ID=id and name in(

select name from sysobjects where xtype='PK' and parent_obj=@Obj_ID

)))

if @@rowcount>1 --检查表中的主键是否为复合主键

begin

select @strfd='',@strjoin='',@strwhere=''

select @strfd=@strfd+',['+name+']'

,@strjoin=@strjoin+' and a.['+name+']=b.['+name+']'

,@strwhere=@strwhere+' and b.['+name+'] is null'

from syscolumns where id=@Obj_ID and colid in(

select colid from sysindexkeys where @Obj_ID=id and indid in(

select indid from sysindexes where @Obj_ID=id and name in(

select name from sysobjects where xtype='PK' and parent_obj=@Obj_ID

)))

select @strfd=substring(@strfd,2,2000)

,@strjoin=substring(@strjoin,5,4000)

,@strwhere=substring(@strwhere,5,4000)

goto lbusepk

end

end

end

else

goto lbusetemp

/*--使用标识列或主键为单一字段的处理方法--*/

lbuseidentity:

exec('select top '+@Id1+@FdShow+' from '+@QueryStr

+' where '+@FdName+' not in(select top '

+@Id2+' '+@FdName+' from '+@QueryStr+@FdOrder

+')'+@FdOrder

)

return

/*--表中有复合主键的处理方法--*/

lbusepk:

exec('select '+@FdShow+' from(select top '+@Id1+' a.* from

(select top 100 percent * from '+@QueryStr+@FdOrder+') a

left join (select top '+@Id2+' '+@strfd+'

from '+@QueryStr+@FdOrder+') b on '+@strjoin+'

where '+@strwhere+') a'

)

return

/*--用临时表处理的方法--*/

lbusetemp:

select @FdName='[ID_'+cast(newid() as varchar(40))+']'

,@Id1=cast(@PageSize*(@PageCurrent-1) as varchar(20))

,@Id2=cast(@PageSize*@PageCurrent-1 as varchar(20))

exec('select '+@FdName+'=identity(int,0,1),'+@FdShow+'

into #tb from'+@QueryStr+@FdOrder+'

select '+@FdShow+' from #tb where '+@FdName+' between '

+@Id1+' and '+@Id2

)

GO

posted @ 2006-01-22 22:34 Mason 阅读(161) 评论(0) 编辑

2006年1月19日 #

《第3次超级机器人大战α》是日本Banpresto与7月27日发售的人气无敌的PS2战略RPG游戏,是将几个不同世界观的几部动画中的机器人和人气角色汇聚一堂的《机战》系列的最新作,同时也是五年前开始的《机战α》系列的第三作完结篇。本作中收录了4个主角及其机体,而且包括SRX等机体。


本次汉化的美观程度还是与官方差距颇大

  日前,网上流出了国人汉化的《第3次超级机器人大战α》的部分截图。从截图中我们可以看到,这次的汉化还是很全面的,菜单,对话,游戏进程都得到了汉化。


虽然汉化在美观方面较差,但是好在汉化程度还能让人满意



   

   《第3次超级机器人大战α》战斗画面比《第二次机战α》以及《机战MX》更加华丽,遭受攻击时的反应还会依照是否被击毁而有不同的动作,攻击时的机体或角色特写镜头也比以往作品更生动,并请到包括 大张正己 与 金子一马 等业界知名人士担任画面绘制与设定的工作。

  目前《第3次超级机器人大战α》的国人汉化版本的具体上市日期尚未确定,想了解《第3次超级机器人大战α》的剧情的玩家可以尝试一下这个版本。本作的汉化程度究竟大概一个什么程度,还是让我们一起拭目以待吧。

  

posted @ 2006-01-19 09:55 Mason 阅读(1514) 评论(0) 编辑

2005年12月31日 #

摘要: 1. 打开新的窗口并传送参数:   传送参数:response.write("<script>window.open(’*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+...+"’)</script>")  接收参数:string a = Request.QueryString("id");string b = ...阅读全文
posted @ 2005-12-31 15:10 Mason 阅读(116) 评论(0) 编辑

2005年12月20日 #

摘要: 探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页。以下代码说明了我们实例中数据库的一表的部分数据结构:CREATE TABLE [dbo].[TGongwen] ( --TGongwen是红头文件表名 [Gid] [int] IDENTITY (1, 1) NOT NULL ,--本表的id号,也是主键 [title] [varchar] (80) C...阅读全文
posted @ 2005-12-20 17:52 Mason 阅读(432) 评论(0) 编辑

2005年12月16日 #

摘要: 一、SQL Server补丁版本的检查 SQL Server的补丁版本检查不如Windows 补丁版本检查直接,一个系统管理员,如果不了解SQL Server版本对应的补丁号,可能也会遇到一点麻烦,因此在这说明一下,通过这样的办法判别机器是安全的办法,不会对系统产生任何影响。1、用Isql或者SQL查询分析器登录到SQL Server,如果是用Isql,请在cmd窗口输入isql -U sa,然后...阅读全文
posted @ 2005-12-16 15:33 Mason 阅读(89) 评论(1) 编辑

摘要: 包括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查备份集、修复数据库等 (一)挂起操作在安装Sql或sp补丁的时候系统提示之前有挂起的安装操作,要求重启,这里往往重启无用,解决办法:到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager删除PendingFileRenameO...阅读全文
posted @ 2005-12-16 15:11 Mason 阅读(99) 评论(0) 编辑