关于作者

用户名:melon134
笔名:ImFool
地区: Universe-Earth
行业:小学

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



My Favorites

Blogger

Lab

Google

访问统计:
文章个数:223
评论个数:116
留言条数:4




Powered by BlogDriver 2.1

ImFool's Bokee

 

3X 4 Browsing ImFool 's Blog

文章

杯子和水
杯子:“我寂寞,我需要水,给我点水吧。”
主人:“好吧,拥有了想要的水,你就不寂寞了吗?”
杯子:“应该是吧。”
主人把开水倒进了杯子里。
水很热,杯子感到自己快被融化了,杯子想,这就是爱情的力量吧。
水变温了,杯子感觉很舒服,杯子想,这就是生活的感觉吧。
水变凉了,杯子害怕了,怕什么他也不知道,杯子想,这就是失去的滋味吧。
水凉透了,杯子绝望了,杯子想,这就是缘分的“杰作”吧。
杯子:“主人,快把水倒出去,我不需要了。”
主人不在。杯子感觉自己压抑死了,可恶的水,凉凉的,放在心里,感觉好难过。
杯子奋力一晃,水终于走出了杯子心里,杯子好开心,突然,杯子掉在了地上。
杯子碎了,临死前,看见了,它心里的每一个地方都有水的痕迹,它才知道,它爱水,
它是如此的爱着水,可是,它再也无法把水完整的放在心里了。
杯子哭了,它的眼泪和水溶在一起,奢望着能用最后的力量再去爱水一次。
主人捡着杯子的碎片,一片割破了他的手指。指尖有血。
爱情呀,到底是什么,难道只有经历了痛苦才知道珍惜吗?
爱情呀,到底是什么,难道要到一切都无法挽回才说放弃吗?
  
    这个故事你读懂了吗?其实,它要告诉我们的是这样一个哲理。每一段爱情在开始
的时候都是浪漫而充满激情的,可当时间一天一天的过去,激情和浪漫慢慢地消失,恋爱
中的他们会以为他们的爱情变淡了,所以选择了放弃,而去追求更加完美的爱情。反反
复复的他们最终一无所获,最后只剩下后悔和悲痛。回头想想现在的你是不是一个装满
了水的杯子呢?如果是,请你好好珍惜杯子中的水,不论它是热的、温的、还是凉的,
因为它的每一种都是和你一起度过的,有了它的你不再寂寞。

- 作者: ImFool 2008年07月28日, 星期一 21:14  回复(0) |  引用(0) 加入博采

十指戴戒指真正含义
据说左手的无名指有一根血管直接与心脏联系,所以新人一定要把结婚戒指亲手戴在对方的左手无名指上。爱你到心里!情愿为你的爱而受戒!
戒指戴在不同的手指有不同的意义呀。
右手和左手都有不同的意义。
右手小指:不谈恋爱。
右手无名指:热恋中。
右手中指:名花有主。
右手食指:单身贵族。
左手小指:不婚族。
左手无名指:结婚。
左手中指:订婚。
左手食指:未婚。
大拇指都是代表权势的意思,也可以做自信的意思。
戴戒指是有讲究的。按西方的传统习惯来说,左手显示的是上帝赐给你的运气,因此,戒指通常戴在左手上。
国际上比较流行的戴法是:食指———想结婚,表示未婚;中指———已经在恋爱中;无名指———表示已经订婚或结婚;小指———表示独身。
至于右手,在传统上也有一个手指戴戒指时是有意义的,那就是无名指。据说戴在这里,表示具有修女的心性。
还有一种戒指,当你戴它的时候,无论你戴在哪里都不具备任何意义,这种戒指就是一般的花戒。这种戒指是起一种装饰的作用,可以戴在任何你想戴的手指上。
戒指戴在拇指上是十分奇怪的,因此不推荐。戒指戴在食指上,感觉是比较有个人主张。最正式的戴法莫过于戴在中指上,如果不想有太正式的感觉,可以在左或右指再加一个简单的指环。无名指上的戒指通常是结婚戒指,无名指长得比较纤细,因此不管什么戒指,戴起来都是标准的秀气。最新鲜的戴法,莫过于把戒指戴在小指头上了。
一枚小小的、简单的尾戒让女性的手莫名其妙地可爱起来,一般代表“我现在只想单身,请不要浪费时间追求我”的意思. 戴设计性比较强的戒指时,如果想更有个人风格,可以考虑搭配另一个材质相同、线条较简单的指环在另一指上。如果戒指的材质属性可以和手表搭配,那是最好不过的了。例如你戴的是枚可爱的花戒指,就可以配一只皮质金框的表。如果你并没有太多可以变换的表或戒指时,不妨考虑把戴戒指的手和戴手表的手错开,不要让不协调的两件配饰在同一只手上出现。
在同一只手上戴两枚戒指时,色泽要一致,而且一枚戒指复杂时,另一枚一定要简单。此外,最好选择相邻的两只手指,如中指和食指、中指和无名指或无名指和小指,千万不要中间隔着一座“山”。
比较通用的一种说法是:
戴在拇指上表示追(有行动的对对方的追求),戴在食指上表示求(仅限于内心
对爱情的渴望),戴中指表示定(正处在恋爱中或已经订婚了),戴在无名指上表示结
(已经结婚了),而戴在小指上就表示离(决定单身或离婚了)。在**,不戴戒指也表
示“名花还无主,你可以追我”。
戒指泄露的心底故事,戒指不仅仅是装饰品,你喜欢戴哪一类戒指,喜欢戴哪根手指,都会泄露你的心底故事。对男士来说——.戴纯银戒指表示性情温和,易迁就他人。
戴金戒指者较重视利益,往往会有精明的生意头脑。
戴翡翠玉石者注重品味素质,处事严谨。
对女士来说—— 喜爱粉红钻或粉红色珊瑚者,感情丰富而浪漫。
喜爱红宝石或红碧玺者,热情似火。
喜爱蓝宝石或海蓝宝者.较内向冷淡。
喜爱祖母绿或土耳其石者,情感纤弱。
手指与戒指——
戒指戴在不同的手指上,能体现与性格有关的心理含义。
喜戴在食指者,性格较偏激倔强。
喜戴在右中指者.崇尚中庸的人生观念。
喜戴在左中指者,有责任感,重视家庭。

- 作者: ImFool 2008年07月28日, 星期一 21:10  回复(0) |  引用(0) 加入博采

通用表单验证js

2005/9/19
通用表单验证js--转
来自:

本程序最初是由wanghr100(灰豆宝宝.net)的checkForm基础上进行修改的,增加了很多功能,如下:
对非ie的支持
增加了内置表达式和内置提示
增加了显示方式(弹出式和页面显示式)
增加了显示一条和显示全部
进行了封装(CLASS_CHECK)
支持外接函数或表达式(应用在密码一致)
简化了调用方式,所有操作只需要<script language='javascript' src='checkform.js'>,然后在HTML里定义各标签验证格式
对IE增加了对键盘输入的限制(如:定义usage='int'时,输入框只能输入数字(非IE无效)
增加了对disabled的不验证
自定义报警方式(重写showMessageEx方法)

声明: 对本程序可以任意复制传播,但请保留声明部分,对于内置的表达式有些没有做到很严格,如果你有好的建议和意见,欢迎邮件和我联系或者上我的博客留言


简介:

  本程序只需要对需要验证的标签设置三个属性:usage,exp,tip

usage   : 内置格式或表达式或函数
exp     : 正则表达式(注意如果指定了usage则忽略exp)
tip       : 出错提示(如果是内置格式可以不要此属性,有缺省提示)

  调用时只需要引用<script language='javascript' src='checkform.js'></script>,然后为每个标记增加以上3个属性(不一定需要全部) ,注意本js的默认编码是gb2312,如果你的.net程序是utf-8,可以把js另存为utf-8格式的,或者该webconfig里编码为gb2312

演示:
基本表达式演示
内置表达式演示
外接函数和外接表达式演示
单条弹出式提示演示
自定义报警测试
下载:
下载1
下载2



checkform.js
<!------------------------------------checkform.js-----start------------------------>
////////////////////////////////////////////////////////////////////////////////
/*
*--------------- 客户端表单通用验证checkForm(oForm) -----------------
* 本程序最初是由wanghr100(灰豆宝宝.net)的checkForm基础上进行修改的,增加了很多功能,如下:
* 1.对非ie的支持
* 2.增加了内置表达式和内置提示
* 3.增加了显示方式(弹出式和页面显示式)
* 4.增加了显示一条和显示全部
* 5.进行了封装(CLASS_CHECK)
* 6.支持外接函数或表达式(应用在密码一致)
* 7.简化了调用方式,所有操作只需要<script language='javascript' src='checkform.js'>,
  然后在HTML里定义各标签验证格式
* 8.对IE增加了对键盘输入的限制(如:定义usage='int'时,输入框只能输入数字(非IE无效)
* 9.增加了对disabled的不验证
* 10.自定义报警方式(重写showMessageEx方法)
*-----------------------------申明信息-----------------------------
* 版本: 0.12
* 作者: ttyp
* 邮箱: ttyp@21cn.com
* 博客: http://www.cnblogs.com/ttyp/
* 声明: 对本程序可以任意复制传播,但请保留这些声明,对于内置的表达式有些没有做到很严格,如果你
  有好的建议和意见,欢迎邮件和我联系或者上我的博客留言
* 简介:
  本程序只需要对需要验证的标签设置三个属性:usage,exp,tip
  usage : 内置格式或表达式或函数
  exp : 正则表达式(注意如果指定了usage则忽略exp)
  tip : 出错提示(如果是内置格式可以不要此属性,有缺省提示)
  调用时只需要引用<script language='javascript' src='checkform.js'>,然后为每个标记
  增加以上3个属性(不一定需要全部)
* 原作者: wanghr100(灰豆宝宝.net)
* email: wanghr100@126.com
*
*--------------- 客户端表单通用验证checkForm(oForm) -----------------
*/
////////////////////////////////////////////////////////////////////////////////

function CLASS_CHECK()
{
this.pass = true; //是否通过验证
this.showAll = true; //是否显示所有的验证错误
this.alert = false; //报警方式(默认alert报警)
this.message = ""; //错误内容
this.first = null; //在显示全部验证错误时的第一个错误控件(用于回到焦点)
this.cancel = false;
//定义内置格式
var aUsage =
{
"int":"^([+-]?)\\d+$",       //整数
"int+":"^([+]?)\\d+$",       //正整数
"int-":"^-\\d+$",         //负整数
"num":"^([+-]?)\\d*\\.?\\d+$",       //数字
"num+":"^([+]?)\\d*\\.?\\d+$",       //正数
"num-":"^-\\d*\\.?\\d+$",       //负数
"float":"^([+-]?)\\d*\\.\\d+$",       //浮点数
"float+":"^([+]?)\\d*\\.\\d+$",       //正浮点数
"float-":"^-\\d*\\.\\d+$",       //负浮点数
            //邮件
"email":"^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$",
"color":"^#[a-fA-F0-9]{6}",       //颜色
"url":"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$", //联接
"chinese":"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$",   //仅中文
"ascii":"^[\\x00-\\xFF]+$",       //仅ACSII字符
"zipcode":"^\\d{6}$",       //邮编
"mobile":"^0{0,1}13[0-9]{9}$",       //手机
"ip4":"^\(([0-1]?\\d{0,2})|(2[0-5]{0,2}))\\.(([0-1]?\\d{0,2})|(2[0-5]{0,2}))\\.(([0-1]?\\d{0,2})|(2[0-5]{0,2}))\\.(([0-1]?\\d{0,2})|(2[0-5]{0,2}))$",   //ip地址
"notempty":"^[^ ]+$",       //非空
"picture":"(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$", //图片
"rar":"(.*)\\.(rar|zip|7zip|tgz)$",     //压缩文件
"date":"^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$"     //日期
};
//缺省消息
var aMessage =
{
"int" :"请输入整数",       //整数
"int+" :"请输入正整数",       //正整数
"int-" :"请输入负整数",       //负整数
"num" :"请输入数字",       //数字
"num+" :"请输入正数",       //正数
"num-" :"请输入负整数",       //负数
"float" :"请输入浮点数",       //浮点数
"float+":"请输入正浮点数",       //正浮点数
"float-":"请输入负浮点数",       //负浮点数
"email" :"请输入正确的邮箱地址",       //邮件
"color" :"请输入正确的颜色",       //颜色
"url" :"请输入正确的连接地址",       //联接
"chinese":"请输入中文",       //中文
"ascii" :"请输入ascii字符",       //仅ACSII字符
"zipcode":"请输入正确的邮政编码",       //邮编
"mobile":"请输入正确的手机号码",       //手机
"ip4" :"请输入正确的IP地址",       //ip地址
"notempty":"不能为空",       //非空
"picture":"请选择图片",       //图片
"rar" :"请输入压缩文件",       //压缩文件
"date" :"请输入正确的日期"       //日期
}
var me = this;
function checkForm(oForm)
{
me.pass = true;
me.message = "";
me.first = null;

if(me.cancel==true)
{
  return true;
}

var els = oForm.elements;
//遍历所有表元素
for(var i=0;i<els.length;i++)
{
  //取得格式
  var sUsage = els.getAttribute("Usage");
  var sReg = "";
 
  //如果设置Usage,则使用内置正则表达式,忽略Exp
  if(typeof(sUsage)!="undefined"&&sUsage!=null)
  {
  //如果Usage在表达室里找到,则使用内置表达式,无则认为是表达式;表达式可以是函数;
  if(aUsage[sUsage]!=null)
  {  
  sReg = aUsage[sUsage];
  }
  else
  {
  try
  {
    if(eval(sUsage)==false)
    {
    me.pass = false;
    if(me.first==null)
    {
    me.first = els;
    }
    addMessage(getMessage(els));    
    if(me.showAll==false)
    {
    setFocus(els);
    break;
    }
    }
  }
  catch(e)
  {
    alert("表达式[" + sUsage +"]错误:" + e.description)
    return false;
  }
  }
  }
  else
  {  
  sReg = els.getAttribute("Exp");
  }
  if(typeof(sReg)!="undefined"&&sReg!=null)
  {
  //对于失效状态不验证
  if(isDisabled(els)==true)
  {
  continue;
  }
  //取得表单的值,用通用取值函数
  var sVal = getValue(els);
  //字符串->正则表达式,不区分大小写
  var reg = new RegExp(sReg,"i");
  if(!reg.test(sVal))
  {
  me.pass = false;
  if(me.first==null)
  {
    me.first = els;
  }
  //alert(reg);
  //验证不通过,弹出提示warning
  var sTip = getMessage(els);
  if(sTip.length==0&&typeof(sUsage)!="undefined"&&sUsage!=null&&aMessage[sUsage]!=null)
  {
    sTip = aMessage[sUsage];
  }
  addMessage(sTip);
  if(me.showAll==false)
  {
    //该表单元素取得焦点,用通用返回函数
    setFocus(els);
    break;
  }
  }
  }    
}
if(me.pass==false)
{
  showMessage();
  if(me.first!=null&&me.showAll==true)
  {
  setFocus(me.first);
  }
}
return me.pass;
}
/*
* 添加错误信息
*/
function addMessage(msg)
{
if(me.alert==true)
{
  me.message += msg + "\n";
}
else
{
  me.message += msg + "<br>";
}
}
/*
* 显示错误
*/
function getMessage(els)
{
var sTip = els.getAttribute("tip");
if(typeof(sTip)!="undefined"&&sTip!=null)
{
  return sTip;
}
else
{
  return "";
}
}

/*
* 显示错误
*/
function showMessage()
{
//外接显示错误函数
if(typeof(me.showMessageEx)=="function")
{
  return me.showMessageEx(me.message);
}
if(me.alert==true)
{
  alert(me.message);
}
else
{
  var divTip;
  divTip = document.getElementById("divErrorMessage");
  try
  {
  if(typeof(divTip)=="undefined"||divTip==null)
  {
    divTip = document.createElement("div");
    divTip.id   = "divErrorMessage";
    divTip.name   = "divErrorMessage";
    divTip.style.color = "red";
    document.body.appendChild(divTip);
  }
  divTip.innerHTML = me.message;
  }catch(e){}
}
}
/*
* 获得元素是否失效(失效的元素不做判断)
*/
function isDisabled(el)
{
//对于radio,checkbox元素,只要其中有一个非失效元素就验证
if(el.type=="radio"||el.type=="checkbox")
{
  //取得第一个元素的name,搜索这个元素组
  var tmpels = document.getElementsByName(el.name);
  for(var i=0;i<tmpels.length;i++)
  {
  if(tmpels.disabled==false)
  {
  return false;
  }
  }
  return true;
}
else
{
  return el.disabled;
}
}

/*
* 取得对象的值(对于单选多选框把其选择的个数作为需要验证的值)
*/
function getValue(el)
{
//取得表单元素的类型
var sType = el.type;
switch(sType)
{
  //文本输入框,直接取值el.value
  case "text":
  case "hidden":
  case "password":
  case "file":
  case "textarea": return el.value;
  //单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个,"00"表示选中两个
  case "checkbox":
  case "radio": return getRadioValue(el);
  case "select-one":
  case "select-multiple": return getSelectValue(el);
}
//取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
function getRadioValue(el)
{
  var sValue = "";
  //取得第一个元素的name,搜索这个元素组
  var tmpels = document.getElementsByName(el.name);
  for(var i=0;i<tmpels.length;i++)
  {
  if(tmpels.checked)
  {
  sValue += "0";
  }
  }
  return sValue;
}
//取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
function getSelectValue(el)
{
  var sValue = "";
  for(var i=0;i<el.options.length;i++)
  {
  //单选下拉框提示选项设置为value=""
  if(el.options.selected && el.options.value!="")
  {
  sValue += "0";
  }
  }
  return sValue;
}
}
/*
* 对没有通过验证的元素设置焦点
*/
function setFocus(el)
{
//取得表单元素的类型
var sType = el.type;
switch(sType)
{
  //文本输入框,光标定位在文本输入框的末尾
  case "text":
  case "hidden":
  case "password":
  case "file":
  case "textarea":
  try{el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select();}catch(e){};
  break;
 
  //单多选,第一选项非失效控件取得焦点
  case "checkbox":
  case "radio":
  var els = document.getElementsByName(el.name);
  for(var i=0;i<els.length;i++)
  {
  if(els.disabled == false)
  {
    els.focus();
    break;
  }
  }
  break;
  case "select-one":
  case "select-multiple":
  el.focus();
  break;
}
}

//自动绑定到所有form的onsubmit事件
if(window.attachEvent)
{
window.attachEvent("onload",function()
      {
      for(var i=0;i<document.forms.length;i++)
      {
      var theFrom = document.forms;
        if(theFrom)
        {
        theFrom.attachEvent("onsubmit",function(){return checkForm(theFrom);});
        theFrom.attachEvent("onclick",function(){
                var o = event.srcElement;
                if(typeof(o.type)!="undefined")
                {
                var check = o.getAttribute("check");
                if(typeof(check)!="undefined"&&check!=null&&check.toLowerCase()=="false")
                {
                me.cancel = true;
                }                
                }
              }
            );
        }
      }
      }
    );

}
else
{
window.onsubmit = function(e){var theFrom = e.target;if(theFrom){return checkForm(theFrom);}}
window.addEventListener("click",function(e)
      {
      var o = e.target;
      if(typeof(o.type)!="undefined")
      {
        var check = o.getAttribute("check");
        if(typeof(check)!="undefined"&&check!=null&&check.toLowerCase()=="false")
        {        
        me.cancel = true;
        }                
      }
      },false);

}
this.keyCheck = function()
{
if(window.attachEvent)
{
  window.attachEvent("onload",function(){for(var i=0;i<document.forms.length;i++){var theFrom = document.forms; if(theFrom){myKeyCheck(theFrom);}}});
}
else
{
  //TOOD
}
function myKeyCheck(oForm)
{
  var els = oForm.elements;
  //遍历所有表元素
  for(var i=0;i<els.length;i++)
  {
  //取得格式
  var sUsage = els.getAttribute("Usage");
 
  //如果设置Usage,则使用内置正则表达式,忽略Exp
  if(typeof(sUsage)!="undefined"&&sUsage!=null)
  {
  switch(sUsage.toLowerCase ())
  {
    case "zipcode":
    case "int":
    els.onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false)||(this.value.indexOf('-')<0?String.fromCharCode(event.keyCode)=="-":false);}
    els.onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
    els.ondragenter = function(){return false;}
    els.style.imeMode= "disabled";
    break;
    case "mobile":
    case "int+":
    els.onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false);}
    els.onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
    els.ondragenter = function(){return false;}
    els.style.imeMode= "disabled";
    break;
    case "int-":
    els.onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('-')<0?String.fromCharCode(event.keyCode)=="-":false);}  
    els.onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
    els.ondragenter = function(){return false;}
    els.style.imeMode= "disabled";
    break;
    case "float":
    case "num":
    els.onkeypress = function(){return /[\+\-\.]|\d/.test(String.fromCharCode(event.keyCode));}  
    els.onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
    els.ondragenter = function(){return false;}
    els.style.imeMode= "disabled";
    break;
    case "float+":
    case "num+":
    els.onkeypress = function(){return /[\+\.]|\d/.test(String.fromCharCode(event.keyCode));}  
    els.onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
    els.ondragenter = function(){return false;}
    els.style.imeMode= "disabled";
    break;
    case "float-":
    case "num-":
    els.onkeypress = function(){return /[\-\.]|\d/.test(String.fromCharCode(event.keyCode));}  
    els.onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
    els.ondragenter = function(){return false;}
    els.style.imeMode= "disabled";
    break;
    case "ascii":
    els.style.imeMode= "disabled";
    break;
    case "ip4":
    els.onkeypress = function(){return /[\.]|\d/.test(String.fromCharCode(event.keyCode));}  
    els.onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
    els.ondragenter = function(){return false;}
    els.style.imeMode= "disabled";
    els.maxLength = 15;
    break;
    case "color":
    els.onkeypress = function(){return /[a-fA-Z]|\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('#')<0?String.fromCharCode(event.keyCode)=="#":false);}  
    els.onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
    els.ondragenter = function(){return false;}
    els.maxLength = 7;
    els.style.imeMode= "disabled";
    break;
    case "date":
    els.onkeypress = function(){return /[\/\-\.]|\d/.test(String.fromCharCode(event.keyCode));}  
    els.onpaste = function(){return !clipboardData.getData('text').match(/\D/);}
    els.ondragenter = function(){return false;}
    els.style.imeMode= "disabled";
    break;    
  }
  }
  }
}
}
}
//初始化
var g_check = new CLASS_CHECK();
g_check.keyCheck();
<!------------------------------------checkform.js-----end------------------------>


demo1.htm 基本表达式演示
<----------------------------demo1.htm-----start------------------------>
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<HEAD>
<SCRIPT language=JavaScript src="checkform.js"></script>
<SCRIPT language=JavaScript>
function test()
{
return document.getElementById('password').value==document.getElementById('rpassword').value;
}
</SCRIPT>
</HEAD>
<BODY>基本表达式测试:
<FORM name=form1 >
test:<INPUT name=test>不验证<BR>
姓名:<INPUT name=user Tip="姓名不能为空" Exp="[^ ]+" disabled=true>Disabled不验证<BR>
账号:<INPUT name=id Tip="账号不能为空" Exp="[^ ]+">不能为空<BR>
IP:<INPUT name=iP usage="ip4">ip<BR>
密码:<INPUT type=password id="password" name=password Tip="密码六位以上" Exp="\S{6,}">六位以上<BR>
重复密码<INPUT type=password id="rpassword" name=rpassword usage="test()" tip="重复密码不一致!" >重复密码<BR>
电话:<INPUT name=number Tip="电话号码含有非法字符" Exp="^\d+$"><BR>
相片上传:<INPUT type=file name=pic Tip="相片应该为JPG,BMP格式的" Exp="(.*)(\.jpg|\.bmp)$"><BR>
出生日期:<INPUT name=dt Tip="日期格式2004-08-10" Exp="^\d{4}\-\d{1,2}-\d{1,2}$">日期格式2004-08-10<BR>
省份: <SELECT name=sel Tip="请选择所在省份" Exp="^0$"><OPTION value="" selected>请选择<OPTION value=1>福建省<OPTION value=2>湖北省</OPTION></SELECT> <BR>
选择你喜欢的运动:<BR>游泳<INPUT type=checkbox name=c Tip="请选择2项或以上" Exp="^0{2,}$" disabled> 篮球<INPUT type=checkbox name=c> 足球<INPUT type=checkbox name=c> 排球<INPUT type=checkbox name=c> <BR>
你的学历: 大学<INPUT type=radio name=r Tip="请选择一项学历" Exp="^0$"> 中学<INPUT type=radio name=r> 小学<INPUT type=radio name=r> <BR>
个人介绍: <TEXTAREA name=txts Tip="个人介绍不能为空,且不少于20字" Exp="^[\s|\S]{20,}$"></TEXTAREA>20个字以上
<INPUT type=submit value=提交查询内容>
</FORM>
</BODY>
</HTML>
<----------------------------demo1.htm-----end------------------------>


demo2.htm 内置表达式演示
<----------------------------demo2.htm-----start------------------------>
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<HEAD>
<SCRIPT language=JavaScript src="checkform.js"></script>
</HEAD>
<BODY>内置表达式测试:
<FORM name=form1 >
账号:<INPUT name=id usage="notempty">不能为空<BR>
整数:<INPUT usage="int" >46<BR>
正整数:<INPUT usage="int+" >13试试能不能输入非数字<BR>
负整数:<INPUT usage="int-" >-45<BR>
浮点数:<INPUT usage="float" >56.4<BR>
正浮点数:<INPUT usage="float+" >1.0<BR>
负浮点数:<INPUT usage="float-" >-1.0<BR>
数字:<INPUT usage="num" >345<BR>
正数:<INPUT usage="num+" >+1<BR>
负数:<INPUT usage="num-" >-1.0<BR>
邮箱:<INPUT usage="email">ttyp@21cn.com<BR>
颜色:<INPUT usage="color">#f0f0f0<BR>
连接:<INPUT usage="url">http://www.cnblogs.com/ttyp<BR>
中文:<INPUT usage="chinese">只能中文<BR>
ascii:<INPUT usage="ascii">只能abc<BR>
邮编:<INPUT usage="zipcode">200083<BR>
手机:<INPUT usage="mobile">13678452345<BR>
IP:<INPUT usage="ip4">192.168.0.1<BR>
图片:<INPUT type=file usage="picture">c:\a.jpg<BR>
压缩文件:<INPUT type=file usage="rar">c:\a.rar<BR>
日期:<INPUT usage="date">2005-04-12<BR>
<INPUT type=submit value=提交查询内容>
</FORM>
</BODY>
</HTML>
<----------------------------demo2.htm-----end------------------------>



domo3.htm 外接函数和外接表达式演示
<----------------------------demo3.htm-----start------------------------>
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<HEAD>
<SCRIPT language=JavaScript src="checkform.js"></script>
<SCRIPT LANGUAGE="JavaScript">
<!--
function test()
{
try
{
var aa = document.getElementById("a").value;
var bb = document.getElementById("b").value;
var cc = document.getElementById("c").value;
if(!isNaN(aa)&&!isNaN(bb)&&!isNaN(cc)&&aa.length>0&&bb.length>0&&cc.length>0)
{
  return aa*1+bb*1>cc*1;
}
else
{
  return false;
}
}catch(e){alert();return false;}
}
//-->
</SCRIPT>
</HEAD>
<BODY>外接函数和表达式测试:
<FORM name=form1 >
a:<INPUT id=a usage="num"><BR>
b:<INPUT id=b usage="num" ><BR>
c:<INPUT id=c usage="test()" tip="a+b>c">a+b>c<BR>
长度:<INPUT id=d usage="document.getElementById('d').value.replace(/[^\x00-\xff]/g,'**').length<=5" tip="长度大能于5" value="你好啊">不大于5<BR>
<INPUT type=submit value=提交查询内容>
</FORM>
</BODY>
</HTML>
<----------------------------demo3.htm-----end------------------------>



demo4.htm 单条弹出式提示测试
<----------------------------demo4.htm-----start------------------------>
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<HEAD>
<SCRIPT language=JavaScript src="checkform.js"></script>
<SCRIPT LANGUAGE="JavaScript">
<!--
//弹出式报警
g_check.alert = true;
//单条报警
g_check.showAll = false;

function test()
{
try
{
var aa = document.getElementById("a").value;
var bb = document.getElementById("b").value;
var cc = document.getElementById("c").value;
if(!isNaN(aa)&&!isNaN(bb)&&!isNaN(cc)&&aa.length>0&&bb.length>0&&cc.length>0)
{
  return aa*1+bb*1>cc*1;
}
else
{
  return false;
}
}catch(e){alert();return false;}
}
//-->
</SCRIPT>
</HEAD>
<BODY>单条弹出式提示测试:
<FORM name=form1 >
a:<INPUT id=a usage="num"><BR>
b:<INPUT id=b usage="num" ><BR>
c:<INPUT id=c usage="test()" tip="a+b>c">a+b>c<BR>

<INPUT type=submit value=提交查询内容>
</FORM>
</BODY>
</HTML>
<----------------------------demo4.htm-----end------------------------>





demo5.htm 自定义报警测试
<----------------------------demo5.htm-----start------------------------>
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<HEAD>
<SCRIPT language=JavaScript src="checkform.js"></script>
<SCRIPT LANGUAGE="JavaScript">
<!--
//外接报警方式(自定义)
CLASS_CHECK.prototype.showMessageEx = function()
{
document.title = this.message;
}
//弹出式报警
g_check.alert = true;
//单条报警
g_check.showAll = false;

function test()
{
try
{
var aa = document.getElementById("a").value;
var bb = document.getElementById("b").value;
var cc = document.getElementById("c").value;
if(!isNaN(aa)&&!isNaN(bb)&&!isNaN(cc)&&aa.length>0&&bb.length>0&&cc.length>0)
{
  return aa*1+bb*1>cc*1;
}
else
{
  return false;
}
}catch(e){alert();return false;}
}
//-->
</SCRIPT>
</HEAD>
<BODY>自定义报警测试: (在title处显示单条报警)
<FORM name=form1 >
a:<INPUT id=a usage="num"><BR>
b:<INPUT id=b usage="num" ><BR>
c:<INPUT id=c usage="test()" tip="a+b>c">a+b>c<BR>

<INPUT type=submit value=提交查询内容>
</FORM>
</BODY>
</HTML>
<----------------------------demo5.htm-----end------------------------>

- 作者: ImFool 2008年05月31日, 星期六 16:55  回复(0) |  引用(0) 加入博采

ASP.NET实现匿名访问控制

ASP.NET实现匿名访问控制

通过学习我掌握了两种控制方法,实现了对于网站的匿名访问控制,一个是通过IIS实现,另一个是通过ASP.NET实现。个人感觉两种基本上可以实现的功能没有什么差别,不过通过ASP.NET实现的更易于管理和维护。

对于通过IIS的实现都比较清楚,可以对文件夹或单个文件(页面)设置访问权限,IIS提供了“目录安全性”和“文件安全性”的设置方法。并可以通过直接设置不同访问人的权限。其中就提供了匿名访问的控制方法,这里不再细说。



ASP.NET控制方法:

首先介绍例子实现的效果,一个网站登陆以后可以将用户信息保存在一个cookie中,并标识用户是通过身份验证的,在访问其他页面的时候直接对用户的身份是否通过验证进行判断,如果通过即可继续访问页面,如果是一个未通过验证的匿名访问用户(即未登录用户)则将跳转到登陆页面提示用户登录。设置其中一个用户注册页面为可以匿名访问,因为业务逻辑上只有允许注册才能登陆。

在登陆页面还是先对用户的用户名和密码进行验证,至于使用与数据库比对的方法还是到AD中验证等都可以,然后通过以下的方法将当前用户在cookie中标识为通过验证的用户,并跳转到用户跳转到登陆页之前请求的页面。

FormsAuthentication.RedirectFromLoginPage(userName,createPersistentCookie);

在用户直接请求的页面上我们使用如下的方法来验证用户。

Context.User.Identity.IsAuthenticated

Context:获取与该页关联的 System.Web.HttpContext 对象

User:为当前 HTTP 请求获取或设置安全信息

Identity:获取当前用户的标识

IsAuthenticated:获取一个bool值,该值指示是否验证了用户



然后我们在Web.config中进行安全设置。

  <authentication mode="Forms">

    <forms loginUrl="Login.aspx"></forms>

</authentication>

"Forms" 您为用户提供一个输入凭据的自定义窗体(Web 页),然后在您的应用程序中验证他们的身份。用户凭据标记存储在 Cookie 中。

  <authorization>

    <deny users="?" />

  </authorization>

deny表示禁止,users="?"表示匿名用户

<location path="NewUser.aspx">

  <system.web>

    <authorization>

        <allow users="*" />

    </authorization>

  </system.web>

</location>

表示新用户注册页面NewUser.aspx,可以允许任何人访问。

这样就实现了对于匿名用户的访问控制。

- 作者: ImFool 2008年05月31日, 星期六 16:53  回复(0) |  引用(0) 加入博采

欧美影视中常用的手势详解

手势名称:“我爱你”手势
手势做法:将大拇指和食指、小指伸出来。
补充说明:记得大拇指是要伸出来的哦,不然就和下面要说的一个手势会混淆哦。


图示:选自《美国偶像》,每次主持人Ryan介绍评委的时候,Randy总是用“我爱你”手势跟大家打招呼。

详细解释:“我爱你”手势其实由三个部分组成:在美国的手势字母中——只伸出食指,表示“I”;伸出食指和大拇指,表示“L”(LOVE);伸出大拇指和小指,表示“Y”(YOU)。简化连起来,伸出大拇指食指和小指就是 I Love You咯。

也许你会问:为啥我记得这个是手势是表示“摇滚”的意思咧?实际上呢,摇滚手势和“我爱你”很像,很容易混淆哦。

手势名称:“摇滚”手势
手势做法:将食指与小指伸直,同时用拇指压住弯下的中指和无名指。
补充说明:它同上一个手势的区别就在于拇指是否要伸出来,挺容易搞错滴。


图示:美国总统小布什就是“摇滚”手势的粉丝,虽然强烈怀疑他是搞错了…………

详细解释:我们现在看到的“摇滚”手势看上去像是山羊。而在西方文化中,山羊通常表示魔鬼的化身,因此这个手势原是一种在地中海沿岸国家的居民用的下流手势,可追溯至古希腊时期,被叫作“魔鬼之角”、“山羊之角”、“摇滚之角”、“甩出山羊”、“邪恶手指”或直接称为“角”( mano cornuta或是horned hand)等等。随着时代的发展,“山羊角”在Black Sabbath时期被引进金属摇滚中,并逐渐发展,成了全世界ROCK迷的共同手势。在美国的一些摇滚音乐亚文化中也被称作“继续摇滚”手势(Rock On),德克萨斯大学运动队的啦啦队用这一手势为队员加油,自然是跟撒旦魔鬼毫无关系,纯粹表示“出色、极好”。在你赞某人很棒的时候,你也能使用这个手势,表示“You rock!

多说两一句,"Rock on"手势同"I love you"手势的混用其实并没有太大问题。你说要在演唱会上比划出“你很棒”或者“我爱你”不是一样能表达对于偶像滔滔不绝的仰慕之情么?但是为什么说布什总统这个手势就使用得不妥呢?毕竟政坛这种敏感领域,口误笔误都容易被反对人士抓住把柄;而使用一个原意是“魔鬼”的手势这不明摆着招人挑刺么?不过反正布什总统这嘴皮子不麻利被人笑话也不是一天两天,估计广大人民群众也都习惯了吧?

1、付帐(cash):右手拇指、的食指和中指在空中捏在一起或在另一只手上作出写字的样子,这是表示在饭馆要付帐的手势。
2、"动脑筋"(use your brain)"机敏一点"(being clever):用手指点点自己的太阳穴。
3、"傻瓜"(fool):用拇指按住鼻尖摇动其四指,或十指分开。也常常食指对着太阳穴转动,同时吐出舌头,则表示所谈到的人是个"痴呆""傻瓜"。
4、"讲的不是真话"(lying):讲话时,无意识地将一食指放在鼻子下面或鼻子边时,表示另人一定会理解为讲话人"讲的不是真话"难以置信。
5、自以为是(complacent assertion);用食指往上鼻子,还可表示"不可一世"(overbearing)。
6、"别作声"(stopping-talking):嘴唇合扰,将食指贴着嘴唇,同时发出"hush"嘘嘘声。
7、侮辱和蔑视(insulting and scorning);用拇指顶住鼻尖儿,冲着被侮辱者摇动其它四指的鸡冠或手势。
8、赞同(agreement):向上翘起拇指。
9、祝贺(congratulation):双手在身前嘴部高度相搓的动作。

10、威胁(menace):由于生气,挥动一只拳头的动作似乎无处不有。因受挫折而双手握着拳使劲摇动的动作。
11、"绝对不行"(absolutely not):掌心向外,两只手臂在胸前交叉,然后再张开至相距一米左右。
12、"完了"(that's all):两臂在腰部交叉,然后再向下,向身体两侧伸出。
13、"害羞"(shame):双臂伸直,向下交叉,两掌反握,同时脸转向一侧。
14、打招呼(greeting):英语国家人在路上打招呼,常常要拿帽子表示致意。现一般已化为抬一下帽子,甚至只是摸一下帽沿。
15、高兴激动(happiness and excitement):双手握拳向上举起,前后频频用力摇动。
16、愤怒、急燥(anger and anxiousness):两手臂在身体两侧张开,双手握拳,怒目而视。也常常头一扬,嘴里咂咂有声,同时还可能眨眨眼睛或者眼珠向上和向一侧转动,也表示愤怒、厌烦、急燥。
17、怜悯、同情(pity):头摇来摇去,同里嘴里发出咂咂之声,嘴里还说"that's too bad."或"sorry to hear it."
18、"太古怪了"(too queer):在太阳穴处用食指划一圆圈。

- 作者: ImFool 2008年05月8日, 星期四 16:01  回复(0) |  引用(0) 加入博采

美妙英语形容你心仪的女孩

在中文里我们有太多太多的成语来形容美女, 如沉鱼落雁, 倾国倾城, 闭月羞花等等. (你能想像如何教一个不懂中文的老外这些成语吗? ) 英语中用来形容女孩子的字眼也不少, 但跟中文比起来就真的是小巫见大巫了, 不过还是有些用来形容女人的说法值得学一学.

  1. Hey, look at the chick over there.

  看看在那边的女孩.

  Chick 这个字代表的就是女孩子, 各位不要跟 chic (时尚) 这个字给搞混了. Chick 这个字念起来就像是 chicken 前面的几个音, 所以蛮好认的. 一般而言 chick 和 girl 是可以交互使用的, 例如, 她是个十三岁的女孩, 就是 She is a thirteen-year-old chick.

  2. She is gorgeous!

  她真是漂亮.

  要懂得适时地称赞女孩实在是每个男士必修的功课. 一句简单的 You are pretty! 或是 You are so beautiful 就可以让人家高兴上好半天. Gorgeous 和 pretty, beautiful 都是美丽的意思, 但是程度上可能要比 pretty 和 beautiful 还要再来的高一些. 所以下次再看到美女, 别忘了说一声, You are gorgeous! 说不定她就变成你的老婆了.

  3. She is a babe.

  她是个美女.

  这句话是用来形容美女的喔. 要特别注意 babe 跟 baby 只有一字之差但却相差十万八千里. 你千万不要说成 Oh! I like the baby, 那么你很有可能被人家当成恋童癖.

  4. She turns me on.

  她让我眼睛为之一亮.

  各位男生不知有没有这样的经验, 一位长发美女从你眼前走过, 你的目光便不自觉地投射在她身上, 全身的血液也开始跟著沸腾起来. 这要怎么用英文形容呢? 这就叫 She turns me on. 这好像是说, 她把你身上的电源都给打开了.

  另外, turn-on 也可以当作名词用, 它用来表示任何令你觉得很不错的人, 事, 物. 另外你可以说 She is such a turn-on. 就是说她给我的感觉还蛮不错的.

  5. I think she is a hottie.

  她是个辣妹.

  所谓的 hottie 就是指那种很辣的辣妹, 穿著打扮各方面可能都非常地时髦. 或是你也可以说, hot babe 或是 hot chick. 但有一点请注意, 也许你在国内对一个女孩子说, 你真是个辣妹啊! 她可能还会蛮高兴的, 但是在美国你不可以去跟女孩子说 You are a hottie. 那么你可能换回一巴掌.

  另外有一个字眼跟 hottie 很像, 叫 hot tamale, 但是这个字一般而言比较少人在用. Hot tamale 原是一种墨西哥食物, 被引申成为辣妹的意思, 不过这个用法比 hottie 更强烈, hottie 单指好看或漂亮的人, 但 hot tamale 则又加上了一些不能自己控制自己, 有点疯狂的意思, 所以也不要乱用喔.

  6. Do you know Jean? She is a cutie.

  你认识 Jean 吗? 她好可爱喔!

  看来中外皆然, 女孩子总是分为二种, 漂亮美艳型和活泼可爱型. 至于那种遵守交通规则型 (obeying the traffic rules 则不在本文讨论范围之内) 漂亮的女生叫 hottie, 相对的, 可爱的女生就叫 cutie. 或是你单讲, She is so cute! 也是不错的用法.

  7. She is well-developed. 她很丰满.

  刚才说的是以脸蛋来分的, 现在说的是以身材来分的. 看到身材很好的女生, 女生之间彼此会说 She is well-developed 或是 well-endowed.

- 作者: ImFool 2008年05月8日, 星期四 11:28  回复(0) |  引用(0) 加入博采

分区工具Disk Genius使用详解

誉为分区小超人的DISKMAN又推出其第二版Disk Genius,他的功能在原来1.2的基础上,又具有强大的分共维护功能,让我们来看一下其中的功能吧。

现在可供选用的硬盘分区工具软件很多,但基本上都是“外国货”,只有被誉为分区小超人的DISKMAN是地地道道的国货。DISKMAN以其操作直观简便的特点为菜鸟级电脑用户所喜爱,但在近两年的时间里,DISKMAN的版本一直停留在V1.2,总不见作者推出升级版本,不免让人为它担心。现在,2.0版本的DISKMAN终于出现了,仍然是免费软件,只是名子改成了Disk Genius。经过近两年的潜心“修炼”,Disk Genius的“功力”确实不可当日而语,它不仅提供了基本的硬盘分区功能(如建立、激活、删除、隐藏分区),还具有强大的分区维护功能(如分区表备份和恢复、分区参数修改、硬盘主引导记录修复、重建分区表等);此外,它还具有分区格式化、分区无损调整、硬盘表面扫描、扇区拷贝、彻底清除扇区数据等实用功能。虽然Disk Genius功能更强大了,但它的身材依然“苗条”,只有区区143KB。

一、Disk Genius的主要功能及特点

1、仿WINDOWS纯中文图形界面,无须任何汉字系统支持,以图表的形式揭示了分区表的详细结构,支持鼠标操作;

2、提供比fdisk更灵活的分区操作,支持分区参数编辑;

3、提供强大的分区表重建功能,迅速修复损坏了的分区表;

4、支持FAT/FAT32分区的快速格式化;

5、在不破坏数据的情况下直接调整FAT/FAT32分区的大小;

6、自动重建被破坏的硬盘主引导记录;

7、为防止误操作,对于简单的分区操作,在存盘之前仅更改内存缓冲区,不影响硬盘分区表;

8、能查看硬盘任意扇区,并可保存到文件。

9、可隐藏FAT/FAT32及NTFS分区。

10、可备份包括逻辑分区表及各分区引导记录在内的所有硬盘分区信息。

11、提供扫描硬盘坏区功能,报告损坏的柱面。

12、具备扇区拷贝功能。

13、可以彻底清除分区数据。

二、Disk Genius运行界面

如果你只是想利用Disk Genius查看、备份硬盘分区信息,可以在直接在WINDOWS 9x下运行本软件。但如果涉及更改分区参数的写盘操作,则必须在纯DOS环境下运行,而且在使用前应将“BIOS设置”中的“Anti Virus”选项设为“Disable”。

运行“DiskGen.exe”启动本软件后,将自动读取硬盘的分区信息,并在屏幕上以图表的形式显示硬盘分区情况。图1是Disk Genius检测笔者硬盘得到的分区信息结构图。左侧的柱状图显示硬盘上各分区的位置及大小,最底部的分区为第一个分区。通过柱状图各部分的颜色和是否带网格,可以判断分区的类型,灰颜色的部分为自由空间(不属任何分区),不带网格的分区为主分区,带网格的为扩展分区,扩展分区又进一步划分成逻辑分区(逻辑盘D、E、F…)。屏幕右侧用表格的形式显示了各分区的类型及其具体参数,包括分区的引导标志、系统标志,分区起始和终止柱面号、扇区号、磁头号。如果你对这些参数的意义不太懂,可以参阅帮助文件中“关于分区表”的内容。

在柱状图与参数表格之间,有一个动态连线指示了它们之间的对应关系。你可以通过鼠标在柱状图或表格中点击来选择一个分区,也可以用键盘上的光标移动键来选择当前分区。用“TAB”或“SHIFT-TAB”键可在柱状图和表格之间选择。当你选择了一个FAT或FAT32分区后,表格下部的窗口中将会显示关于这个分区的一些信息:分区的总扇区数、总簇数和簇的大小,两份FAT表、根目录、数据区的开始柱面号、磁头号、扇区号。

特别提示:分区参数表格的第0~3项分别对应硬盘主分区表的四个表项,而第4、5、6…项分别对应逻辑盘D、E、F…。当硬盘只有一个DOS主分区和扩展分区时(利用FDISK进行分区的硬盘一般都是这样的),“第0项”表示主分区(逻辑盘C)的分区信息,“第1项”表示扩展分区的信息,“第2、第3项”则全部为零,不对应任何分区,所以无法选中。笔者曾在某网站论坛上发现一张有关DISKMAN疑问的帖子,询问有没有办法将分区参数表格中全部为零的“第2项、第3项”删除掉, 这当然是不可能的,发帖者显然对硬盘分区知识缺乏了解。想真正弄懂分区参数表格中各项的意义,必须了解硬盘分区表链结构,建议有兴趣的朋友多找一些相关资料看看。

三、使用说明

1. 备份及恢复分区表:

启动本软件后,按F9键,或选择“工具”菜单下的“备份分区表”项,在弹出的对话框中输入文件名(默认保存在A盘上),即可备份当前分区表。按F10键,或选择“工具”菜单下的“恢复分区表”项,然后输入文件名(默认从A盘读取),本软件将读入指定的分区表备份文件,并更新屏幕显示,在你确认无误后,可将备份的分区表恢复到硬盘。

2. 建立分区:

未建立分区的硬盘空间(即自由空间)在分区结构图中显示为灰色,只有在硬盘的自由空间才能新建分区。

要建立主分区(Primary),先选中分区结构图中的灰色区域,按ENTER键;然后按提示输入分区大小,选择分区类型(要建立非DOS分区,还须根据提示设定系统标志,如建立Linux分区,系统标志为“83”)。利用本软件,你最多可以建立四个DOS主分区。存盘前如用户未设置启动分区,则自动激活第一个主分区。

要建立扩展分区,先选中分区结构图中的灰色区域,按F5键,在弹出的提示框中输入分区大小后确认。扩展分区建立后,还要将其进一步划分为多个逻辑分区(逻辑盘)才能使用,方法是:选中新建立的扩展分区(绿色区域)后,按ENTER键,其后的操作与建立主分区时相同。

提示:当硬盘上已有一个扩展分区时,就不能再建扩展分区了。如果你想将某个与扩展分区相邻的自由空间再划成扩展分区(即扩大“扩展分区”的范围),只能采取先删除已有的扩展分区,然后再重建才行。

3. 激活分区、删除分区、隐藏分区:

选中要激活的主分区,按F7键即可将其设定为活动分区,活动分区的系统名称将以红色显示。

选中某一分区,按F4键即可隐藏该分区,再次按F4键恢复;按Delete键或F6键即可删除选定分区。

提示:如删除主分区,其所在空间转化为自由空间(变成灰色区域);如删除某一个逻辑分区(如D、E…盘)后,其所在空间并不变成自由空间,而是转化为未使用的扩展分区(变成绿色区域

4.调整分区大小

本软件能在不损坏任何数据的情况下,直接调整FAT16或FAT32分区的大小。方法是:选择要调整的分区,在“分区”菜单下选择“调整分区大小”命令,然后按提示操作。建议在调整前运行WINDOWS系统的“磁盘扫描程序”检查硬盘错误并纠正,并做好重要文件的备份。不可以在调整过程中强行中断或关机(重新启动)。否则,被调整分区上的数据将会全部丢失。

不过,笔者发现,Disk Genius的分区调整操作实际上只是将分区的终止柱面数、磁头数、扇区数在可能的范围内(即没有数据的区域)作调整,并不能真正挪动分区的起始位置。所以此项功能似乎用处并不大。

5. 修改分区参数:

选中要修改的分区,按F11键进入修改状态(如图2),将光标移动到要修改的参数,键入你要设定的值。修改完毕后选“确定”退出。

提示:用此法可调整分区的起始和终止柱面号、磁头号、扇区号,从而调整分区大小,但可能会造成逻辑盘(数据)丢失,不熟悉分区参数含义的用户要慎用此功能。

6. 重建分区表:

当硬盘分区表被病毒或其他原因破坏时,Disk Genius通过未被破坏的分区引导记录信息(主要是搜索分区表结束标志55AA)重新建立分区表。搜索过程可以采用“自动”或“交互”两种方式进行。自动方式保留发现的每一个分区,适用于大多数情况。交互方式对发现的每一个分区都给出提示,由用户选择是否保留。当自动方式重建的分区表不正确时,可以采用交互方式重新搜索。重建过程中,搜索到的分区都将及时显示在屏幕上。但不立即存盘,因此,你可以反复搜索,直到正确的建立分区表之后再存盘。此功能的操作非常简单,只需选择执行“工具”菜单下的“重建分区”命令即可。

此功能是修复逻辑盘丢失故障最简便的方法,特别是“治疗”因使用Pqmagic不当导致的种种硬盘故障的“特效药”。

7.重写主引导记录(MBR):

当硬盘的主引导记录(位于硬盘的0柱面0磁头1扇区)损坏,不能引导系统时,可用本功能重写主引导记录。Disk Genius会自动检查并重写损坏的主引导记录。对于没有主引导记录(MBR)的新硬盘,Disk Genius会自动建立MBR。本功能位于“工具”菜单下。

8. 参数检查:

本软件在读出分区表后及更新硬盘分区表之前,会自动检查分区参数,发现不合理参数时逐一给出提示。你也可以在任何时候按F12键进行检查。

9. 更新硬盘分区表:

在你完成分区建立或分区参数修改操作后,要使新设置生效时,可按F8键,本软件将首先检查分区参数,无误后写入硬盘,从而更新硬盘分区表。

10. 查看任意扇区:

按CTRL_R键,在弹出的查看窗口中(如图3),指定要查看的扇区(可用TAB键选择柱面、磁头、扇区参数),“PageUp”、“PageDown”键可以前后翻页。点击窗口右上方的“保存为”按钮,还可以将以当前扇区开始的若干扇区保存到磁盘文件中。

如果你的计算机装有第二硬盘,在“硬盘”菜单下将出现“第2硬盘”选项。选中它即可切换到第二硬盘。用同样的操作亦可转换到第一硬盘或其它硬盘。

12. 回溯功能:

为了防止失误,用户对分区表进行的简单操作(包括建立、删除、隐藏、激活、修改参数等),Disk Genius并不立即进行存盘,而只是在内存中做修改,等你全部修改完毕,确认无误并下达存盘命令后,它才将你的修改一次性地写入硬盘。但如果执行了写盘操作后,发现未能达到目的甚至出现错误时,是不是就无法挽回了呢?其实不用担心,Disk Genius给你准备了一副“后悔药”,对每一次写盘操作,在执行写盘命令之前,Disk Genius会在其安装目录下自动建立一个回溯文件LOOKBACK.DAT,保存本次运行中所有更新过的扇区的原内容。点击“硬盘”菜单下的“回溯”,就可以将硬盘中被改动的扇区内容恢复到写盘之前的状态。有了回溯功能,无疑为危险的分区操作又提供了一个保险。

13.快速格式化分区:

创建了主分区和逻辑分区后,你还需要对其进行格式化才能使用。现在Disk Genius也具有格式化FAT16或FAT32分区的功能了。本功能位于“分区”菜单下。格式化之前,你可以设定簇的大小,但一般不需要设定,使用默认值就可以了。格式化过程中,会询问你是否进行硬盘表面扫描,根据你硬盘的情况,如果你确信没有坏扇区,就不必扫描了。

14.清除扇区数据:

本功能用空字节填充硬盘扇区,可以让这些扇区中的文件彻底消失。但要提醒你的是,在这样做之前,一定要经过慎重考虑!

要使用本功能,请先选择要清除扇区的分区(千万不能选错!),然后在“工具”菜单下选择“清除扇区数据”。

15.硬盘表面检测:

在“工具”菜单下选择“硬盘表面检测”,即可对某一分区的硬盘表面进行检测。此功能不是按“簇”测试,也不将坏扇区标识出来。因此可以测试任何类型的分区。你可以选择按“柱面”、“磁道”或“扇区”检测。如按“柱面”检测,当发现坏柱面时,将跳过这个坏柱面,继续检测下一个柱面,因此速度快一些。如按“磁道”检测,将跳过发现的坏磁道,因此速度稍慢。如按“扇区”检测,当发现坏磁道时,将对坏磁道内的每一个扇区进行检测,因此速度最慢。检测完成后,将产生一个坏扇区清单,保存到“BADSECT.TXT”中。

16.拷贝扇区

本功能用于对扇区进行复制,将扇区数据从一个位置复制到另一处。如:用FAT32分区的引导记录备份恢复被破坏的引导记录。本功能位于“工具”菜单下。运行时,按提示输入源扇区、目的扇区的起始位置及要复制的扇区个数。

体会:Disk Genius确实是一个为国人量身定做的非常好用的硬盘分区工具,它对分区表进行建立、删除、隐藏、激活、修改参数等操作后,效果可立即从界面图中看到,但此时并未真正生效,等你确认无误并下达存盘命令后,它才将你的修改一次性地写入硬盘。即使是在修改已存盘生效的情况下,你仍可利用其回溯功能“反悔”。当你的硬盘分区出现问题时,不妨先用Disk Genius进行“体检”,即使你是菜鸟,也可以无所畏惧地对分区表“动手术”。强烈推荐大家下载一个试用。将Disk Genius安装到系统紧急启动盘上,并利用它将你的硬盘分区表信息也备份到启动盘上,以备急用。如果要进行分区信息修改时,从软盘启动Disk Genius,这样回溯文件LOOKBACK.DAT也将保存到软盘上,给你保留一付“后悔药”。

- 作者: ImFool 2008年05月6日, 星期二 09:07  回复(0) |  引用(0) 加入博采

ghost 恢复错误成整块磁盘

最近一朋友电脑就因为恢复备份的时候不注意

一阵快速点击Local/Disk/From Image......不用说,后果已经知道了。世界一片灰暗,只剩一个C盘,而且有80G(他的硬盘是80G的)

其他的D、E、F全部不在。几年的心血,重要的资料。他已经不敢再想下去,他的“世界开始下雪”。

这位任兄已经用了一下Easyrecovery进行恢复,但出现好多垃圾,因为恢复的数据并不只是这一次错误之前,还有一些是很久,可能是一个月

两个月之前的东西,重要的是,还有很多文件恢复后基本都打不开。这里重点说明一下FinalData看到这软件的说明是100%恢复。试一下,我删除一个DOC文件

找了一下,高兴ing,找到了,而且正常恢复,哪知,打开一看,全是乱码。无语中。。。这里说这些,是想告诉大家,硬盘数据丢失,马上关机

找朋友的电脑来测试。最后测试正常了,在把自己的硬盘挂在别人的机子上恢复。切记

     说正题了,这里我介绍两种方法:第一种,网上很多都有说过的。一试,不行啊,不知道为什么,但又有很多人用这种方法成功。我这里转贴一下,大家看看

这软件名叫Diskgenius以前叫做diskman,这个工具在矮人DOS工具里面就有。发现有两个版本一个是v2.0 0219 一个是v2.0 0229,矮人DOS工具4.2 里加载中文菜单工具就可以了。用矮人5.0 和5.3也是一样,加载中文菜单工具,里面的版本是v2.0 0229。这里就0219做说明。还有就是很多的GHOST系统光盘里面有一个选项“DOS工具合集”这里面也有的。

1、运行Diskgenius, (运行的命令是"diskgen"     我之前就是犯了错误,一直运行"diskman"就是运行不了,呵呵 ) 记住一定要在纯Dos下运行、这样你后面做的工作才会生效,运行后它会自动检测当前硬盘并将每个分区的信息详细提供给你(如图1)。左边柱形图表示硬盘、有几截就代表有几个分区,最下面深蓝色的是主分区,上面一大截灰色的是被误克隆后丢失的分区(现在变成了未分配区域),我们要做的工作就是把这一大截灰色区域恢复成原来的样子(正常是带网格的蓝色);右边的图表是硬盘及各分区的参数信息、非常明了。



图1



  2、在莱单栏点选“工具/重建分区”,Diskgenius便开始搜索并重建分区(如图2)。



图2
 搜索过程可采用“自动方式”或“交互方式”,“自动方式”保留发现的每一个分区、“交互方式”对发现的每一个分区给出提示并由用户选择。

  这里我们点选“自动方式”(如图3),



图3


  接下来出现搜索进度指示界面(如图4),



图4


  很快分区表重建就完成了(如图5),这时我们可以清楚地看到左边柱形图的灰色区域变成带网格的蓝色了,右边图表中是各分区的详细信息。“呀!那不是以前的分区吗?”这位仁兄兴奋地叫了起来,呵呵,别急,工作还没完呢!要让它生效就赶快点击“确定”吧。

 3、点选菜单栏“工具/重写主引导记录”(如图6),



图6


  Diskgenius一阵忙活,很快就将分区信息更改完毕(如图7),点击“重新启动”,一切OK!



图7


  等熟悉的Windows桌面出现后,这位仁兄便迫不急待地打开“我的电脑”,呵呵、D、E、F盘全都回归了,再进去查看里面的文件,哇!全部毫发未损。

  至此,一场数据恢复战就这样被Diskgenius轻松搞掂了。算算时间,整个过程只用了几分钟哦!

  最后,收呋瓜敫魑惶岣鲂?(1)万一遇到此类情况时最好不要再往硬盘里写入数据(2)平时做好备份工作。可将Diskgenius和分区表信息都备份到启动软盘上,以备不时之需。

  (注:其它类似情况下的数据恢复操作类同。如果不能正常进入系统,可用启动软盘或光盘进入Dos后运行Diskgenius。).

 


- 作者: ImFool 2008年05月6日, 星期二 08:53  回复(0) |  引用(0) 加入博采

Disk Genius基本使用方法

一、使用说明:

DiskMan为硬盘分区表维护工具,可以更改硬盘分区表中包括逻辑分区在内的所有数据。作者提醒使用者要慎重操作,在不了解分区表结构的情况下,不要更改分区参数. 最好在做任何操作之前首先做好备份(@14F9@15),以防不测。不过,在您写盘之前,所有的操作都是在内存中进行的。

二、功能简介:

一般的硬盘分区管理工具,如 FDISK等只能完成某些简单的功能, 如建立分区、删除分区、激活分区等, 且只局限于FAT 分区。DiskMan则打破了这些限制,通过它,您可以建立多种操作系统分区,并且能对分区参数进行具体设定。

1. 备份及恢复分区表: 启动本软件后,按@14F9@15键,然后输入文件名,即可备份分区表。 按F10键,然后输入文件名,可将指定文件的分区表备份恢复到硬盘。

2. 建立分区:
  要建立主分区,先将光标移动到分区结构图的灰色区域,按F1键,然后按照提示输入分区大小及分区类型,要建立非DOS分区, 还须根据提示设定系统标志 ( 如建立XENIX分区,系统标志为 "02" )。DiskMan没有只能建立一个PRI DOS分区的限制,也就是说,您最多可以建立四个主DOS分区。 要建立逻辑分区,先将光标移动到分区结构图中的绿色区域,按F1键,其后的操作与建立主分区时相同。 要建立扩展分区,先将光标移动到分区结构图中的灰色区域,按F5键,然后输入分区大小。 DiskMan不对任何分区进行格式化,建立分区后,要用操作系统提供的相应的format命令进行格式化。

3. 激活分区:
  将光标移动到要激活的分区,按F7键。再次按F7键取消激活。

4. 删除分区:
  将光标移动到要删除的分区,按F6键。

5. 隐藏分区:
  将光标移动到要隐藏的 FAT分区,按F4键。再次按F4键恢复。

6. 直接修改参数:
  将光标移动到要修改的分区,按F11键进入修改状态, 将光标移动到要修改的参数,键入您要设定的值。修改完毕后选“确定”退出即可。

7. 参数检查:
  DiskMan在读出分区表后及更新硬盘分区表之前,会自动检查分区参数,发现不合理参数时逐一给出提示。您还可以在任何时候按F12键进行检查。

8. 更新硬盘分区表:
  在您操作完毕,要使新设置生效时,可按F8键,本软件将首先检查分区参数,无误后写入硬盘。

9. 查看任意扇区:
  按CTRL_R键,然后选择要查看的扇区,选“确定”。查看完毕后,按下除光标移动及翻页键以外的任意一键即可返回。

10. 选择硬盘:
  如果您的计算机装有第二硬盘,按 ALT_D键后,弹出的菜单中将出现“第 2硬盘”选项。选中它即可对第二硬盘操作。用同样的操作亦可转换到第一硬盘。

11. 重建分区表:
  本功能主要用于当硬盘分区表被病毒或其他原因破坏时,试图通过未被破坏的分区引导记录信息重新建立分区表。
  DiskMan将首先搜索0柱面0磁头从2扇区开始的隐含扇区,寻找被病毒挪动过的分区表。接下来搜索每个磁头的第一个扇区。搜索过程可以采用“自动”或“交互”两种方式进行。自动方式保留发现的每一个分区,适用于大多数情况。交互方式对发现的每一个分区都给出提示,由用户选择是否保留。当自动方式重建的分区表不正确时,可以采用交互方式重新搜索。 重建分区表功能位于“工具”菜单下。

12. 回溯:
为了您能放心使用本软件,对于每一次写盘操作,在执行写盘命令之前,DiskMan会首先保存待写扇区的原数据到回溯文件“LOOKBACK.DAT”中。也就是说,回溯文件保存了本次运行中所有更新过的扇区的原内容。当您发现写盘之后未能达到目的甚至出现错误时,您就可以使用回溯功能恢复到写盘之前的状态。为了使本功能更好的发挥作用,请您最好从软盘启动本软件,并去掉写保护。LOOKBACK.DAT保存在 DISKMAN.EXE所在目录。
(上述各项功能均可以通过鼠标操作实现。从1.2版开始,您可以用鼠标拖动窗口,从而可以看到窗口背后的内容。)

三、硬盘分区表:

  主分区表位于硬盘主引导扇区(0柱面0磁头1扇区)的后部。从1BEH字节开始,共占用64个字节,包含四个分区表项。每个分区表项的长度为16个字节,它包含一个分区的引导标志、系统标志、起始和结尾的柱面号、扇区号、磁头号以及本分区前面的扇区数和本分区所占用的扇区数。其中"引导标志"表明此分区是否可引导,即是否活动分区。当引导标志为"80"时,此分区为活动分区;"系统标志"决定了该分区的类型,如"06"为DOS FAT16分区,"0b"为DOS FAT32分区,"63"为UNIX分区等;起始和结尾的柱面号、扇区号、磁头号指明了该分区的起始和
终止位置。


DiskMan分区表项的16个字节分配如下:
第1字节: 引导标志
第2字节: 起始磁头
第3字节: 低6位为起始扇区, 高2位与第4字节为起始柱面
第4字节: 起始柱面的低8位
第5字节: 系统标志
第6字节: 终止磁头
第7字节: 低6位为终止扇区, 高2位与第8字节为终止柱面
第8字节: 终止柱面的低8位
第9-12字节: 该分区前的扇区数目
第13-16字节: 该分区占用的扇区数目

为方便使用, 本程序将引导标志和系统标志用十六进制表示,其它参数均使用十进制.

  扩展分区作为一个主分区占用了主分区表的一个表项。在扩展分区起始位置所指示的扇区(即该分区的第一个扇区)中,包含有第一个逻辑分区表,同样从1BEH字节开始,每个分区表项占用16个字节。逻辑分区表一般包含两个分区表项,一个指向某@14逻辑分区@15,另一个则指向下一个扩展分区。下一个扩展分区的首扇区又包含了一个逻辑分区表,这样以此类推,扩展分区中就可以包含多个逻辑分区。为方便说明,我们把这一系列扩展分区和逻辑分区分别编号,主扩展分区为 1号扩展分区,第一个逻辑分区表所包含的两个分区分别标为 1号逻辑分区和2号扩展分区,依次类推。

- 作者: ImFool 2008年05月6日, 星期二 08:22  回复(1) |  引用(0) 加入博采

Windows 2008远程桌面多用户登陆的配置方法



 


开启远程桌面后,Windows Vista(或Windows 2008)下默认只支持一个administrator用户登陆,一个登录后另一个就被踢掉了,下面提供允许同一个用户名同时多个用户登录的配置方法():


首先要启用远程桌面这一功能:右击“我的电脑”→ 属性 → 远程配置 → 远程桌面,就可以配置相应的远程桌面功能了。下面是配置多用户登陆的方法:
打开 控制面板 → 管理工具 → 终端服务(Terminal Services) → 终端服务配置(Terminal Services Configuration)


1、(修改可以同时登陆的人数,包括自己,默认为2个,如果只需要另外一个人远程登陆你的电脑的话,比如mm或gg,那么这一步就不用做了,直接跳到第二步)连接(Connections):RDP-tcp 点右键 → 属性 → 网络适配器(Network Adapter) → 最大连接数 → 自己修改数目。


2、配置(Edit settings):终端服务器授权模式(Terminal Services licensing mode) → 点右键 → 属性 → 常规 → 限制每个用户只能使用一个会话(Restrict each user to a single session),去掉前面的勾 → 确定。到这里就可以多用户登录了。如果设置没有生效,重启一下(试过了,生效d)。


3、为防止恶搞,阻止远程用户终止控制台管理员。开始 → 运行 → gpedit.msc → 计算机配置 → 管理模板 → Windows组件(Windows Components) → 终端服务(Terminal Services) → 终端服务器(Terminal Server) → 连接(Connections) → 拒绝将已经登录到控制台会话的管理员注销(Deny logoff of an administrator logged in to the console session),右击 → 属性 → 启用。(重启生效)
 



- 作者: ImFool 2008年05月4日, 星期日 12:55  回复(0) |  引用(0) 加入博采