js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent

1、   传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。                            

例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a>');</script>

2、   进行url跳转时可以整体使用encodeURI

例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");

3、   js使用数据时可以使用escape

[Huoho.Com编辑]

例如:搜藏中history纪录。

4、   escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。


最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

posted @ 2008-07-04 17:01 zhangsir 阅读(4) | 评论 (0)编辑

Page 执行中将按照如下顺序激活事件:

Page.PreInit
Page.Init
Page.InitComplite
Page.PreLoad
Page.Load
Page.LoadComplete
Page.PreRender
Page.PreRenderComplete

如果页面从另一个页面继承,如BasePage:System.Web.UI.Page,在BasePage中做了一些扩展,如权限检查,而其他页面从BasePage继承,则BasePage和最终Page的事件激活顺序是:

UI.PreInit
Page.PreInit
UI.Init
Page.Init
UI.InitComplite
Page.InitComplite
UI.PreLoad
Page.PreLoad
UI.Load
Page.Load
UI.LoadComplete
Page.LoadComplete
UI.PreRender
Page.PreRender
UI.PreRenderComplete
Page.PreRenderComplete

如果使用了MasterPage,则MasterPage中的事件和ContentPage中的事件按照下面顺序激活:

ContentPage.PreInit
Master.Init
ContentPage.Init
ContentPage.InitComplite
ContentPage.PreLoad
ContentPage.Load
Master.Load
ContentPage.LoadComplete
ContentPage.PreRender
Master.PreRender
ContentPage.PreRenderComplete

更进一步,如果ContentPage继承BasePage,那么,各事件的执行顺序将变成:

UI.PreInit
ContentPage.PreInit
Master.Init
UI.Init
ContentPage.Init
UI.InitComplite
ContentPage.InitComplite
UI.PreLoad
ContentPage.PreLoad
UI.Load
ContentPage.Load
Master.Load
UI.LoadComplete
ContentPage.LoadComplete
UI.PreRender
ContentPage.PreRender
Master.PreRender
UI.PreRenderComplete
ContentPage.PreRenderComplete

即:先加载继承页的,在加载自己的,如果继承页有继承则先加载继承页的继承。

posted @ 2008-06-07 14:05 zhangsir 阅读(13) | 评论 (0)编辑
名称:  Cooltips  
作者:  
浏览器兼容:
  • Firefox 1.5+
  • Opera 9+
  • Internet Explorer 6+
  •    
       prototype的tip插件,圆角、透明、渐隐渐现
    用于替代网页title属性的效果
    演示地址:  www.tryjs.cn/uploadfile/file/tooltips/tooltips.html
    下载地址:  下载地址
    posted @ 2008-06-04 14:40 zhangsir 阅读(6) | 评论 (0)编辑
    名称:  Moo Slidebox  
    作者:  
    浏览器兼容:
  • Firefox 1.5+
  • Opera 9+
  • Internet Explorer 6+
  •    
       完美的跨浏览器支持(IE 6/7,Opera and Firefox),不同于其他LightBox,mooSlideBox采用底部弹出+碰撞+拖拽效果,

    演示地址1:http://www.artviper.net/test/ajaxslide/index.html

    演示地址2:http://www.homelabel.cn/resources/js/mooSlide2/demo.htm
    下载地址:http://www.homelabel.cn/resources/js/mooSlide2/mooSlide2.rar
    posted @ 2008-06-04 14:22 zhangsir 阅读(1) | 评论 (0)编辑
    名称:  Shadowbox.js
    作者:  Michael J. I. Jackson
    演示地址:  http://mjijackson.com/shadowbox/
    下载地址:  http://mjijackson.com/shadowbox/download.php
    浏览器兼容:
  • Firefox 1.5+
  • Camino
  • Safari 2+
  • Opera 9+
  • Internet Explorer 6+
  •    Yahoo\Ext\Prototype\jQuery\MooTools\Dojo Toolkit
    无论你用以上哪个框架,这个效果都可以用...功能也相当强大

    posted @ 2008-06-04 13:54 zhangsir 阅读(27) | 评论 (0)编辑
    名称:  latentzoom

    演示地址:  http://www.homelabel.cn/sources/js/latentzoom/demo.html
    远程下载地址:  http://www.homelabel.cn/sources/js/latentzoom/latentzoom.rar

    浏览器兼容:
    Firefox 1.5+
    Camino
    Safari 2+
    Opera 9+
    Internet Explorer 6+  
    posted @ 2008-06-04 13:18 zhangsir 阅读(8) | 评论 (0)编辑
    Lightbox JS
    Lokesh Dhakar 译: croc
    查看原文
    http://www.huddletogether.com/projects/lightbox2

    点击这里查看实例演示
    http://www.huddletogether.com/projects/lightbox2

    概要:

    Lightbox JS 是一个简单而又谦恭的用来把图片覆盖在当前页面上的脚本. 它能被快速安装并且运作于所有流行的浏览器.

    最新更新 Version 2.0

    图片集: 分组相关的图片并且能轻松的导航它们
    视觉特效: 奇特的自适应调整
    向后兼容: yes!

    如何使用:

    步骤 1 - 安装

    1、Lightbox v2.0 使用 Prototype 框架和 Scriptaculous 效果库. 你将需要外调这三个 Javascript 文件在你的 header.
    <script type="text/javascript" src="js/prototype.js"></script>
    <script type="text/javascript" src="js/scriptaculous.js?load=effects"></script>
    <script type="text/javascript" src="js/lightbox.js"></script>

    2、外调 Lightbox CSS 文件 (或添加 Lightbox 样式到你现行的样式表中).
    <link rel="stylesheet" href="css/lightbox.css" _fcksavedurl=""css/lightbox.css"" type="text/css" media="screen" />

    3、检查 CSS 并确定调用的 prev.gif 和 next.gif 文件在正确的位置. 同样要确定调用的 loading.gif 和 close.gif 文件及 lightbox.js 文件在正确的位置.

    步骤 2 - 激活

    1、添加 rel="lightbox" 属性到任何一个链接标签去激活lightbox. 例如:
    <a href="images/image-1.jpg" rel="lightbox" title="my caption">image #1</a>
    可选择项: 使用 title 属性加上说明.

    2、如果你有一套你想分组的相关图片, 接着上一部并且又在 rel 属性中添加一个带方括号的组名. 例如:
    <a href="images/image-1.jpg" rel="lightbox[roadtrip]">image #1</a>
    <a href="images/image-2.jpg" rel="lightbox[roadtrip]">image #2</a>
    <a href="images/image-3.jpg" rel="lightbox[roadtrip]">image #3</a>

    3、没有限定每个页面的图片组数量和每个图片组图片的数量. 超级棒!

    由于没有测试过2.04,所以就保留了原来版本的下载
    下载1: Lightbox JS v2.02
    http://www.huddletogether.com/projects/lightbox2/lightbox2.02.zip 

    http://www.huddletogether.com/projects/lightbox2/releases/lightbox2.04.zip

    下载地址2:
    http://www.homelabel.cn/sources/js/lightbox2.02.zip

    http://www.homelabel.cn/sources/js/lightbox2.04.zip

    posted @ 2008-06-04 12:47 zhangsir 阅读(16) | 评论 (0)编辑

    所谓盗链就是指其他网站把我们站点的文件链接帖到他们站上,这样白白占用我们的带宽。访问对于网站盗链行为,不敢恭维的。要实现防盗链,我们就得在IIS处理URL时拦截。

    效果图:

    未加防盗链之前:hm是我的机器名,用http://hm/myweb/default.aspxhttp://localhost/myweb/default访问结果一样。
    这幅图片是任人宰割的。

    加了防盗链之后虽然还是同一个网站但是http://hm/myweb/default.aspx已经不能访问那副花卉图片,被以下图片替代:

    加了防盗链之后用localhost还是正常的!http://localhost/myweb/default访问结果一样。

    原理:

    其实hm是我的机器,但是由于服务器域名是localhost所以即使是同一个网站也不能访问,所以就更别说
    www.其他网站域名.com这样的网站偷取我们的资源。关键就是IIS对所有的请求进行过滤看看是不是本站域名的。

    全部代码:

    Web.Config
    <?xml version="1.0"?>
    <!--
        注意: 除了手动编辑此文件以外,您还可以使用
        Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
         “网站”->“Asp.Net 配置”选项。
        设置和注释的完整列表在
        machine.config.comments 中,该文件通常位于
        \Windows\Microsoft.Net\Framework\v2.x\Config 中
    -->
    <configuration>
     <appSettings/>
     <connectionStrings/>
     <system.web>
        <httpHandlers>
          <add verb="*" path="*.jpg" type="myhandler,App_Code"/>
        </httpHandlers>
        <!--
                设置 compilation debug="true" 将调试符号插入
                已编译的页面中。但由于这会
                影响性能,因此只在开发过程中将此值
                设置为 true。
            -->
      <compilation debug="true"/>
      <!--
                通过 <authentication> 节可以配置 ASP.NET 使用的
                安全身份验证模式,
                以标识传入的用户。
            -->
      <authentication mode="Windows"/>
      <!--
                如果在执行请求的过程中出现未处理的错误,
                则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
                开发人员通过该节可以配置
                要显示的 html 错误页
                以代替错误堆栈跟踪。

            <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
                <error statusCode="403" redirect="NoAccess.htm" />
                <error statusCode="404" redirect="FileNotFound.htm" />
            </customErrors>
            -->
     </system.web>
    </configuration>

     myhandler.cs  新建myhandler.cs 类时系统提示你要放入App_Code
    using System;
    using System.Web;

    /// <summary>
    /// myhandler 的摘要说明
    /// </summary>

    public class myhandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            string FileName = context.Server.MapPath(context.Request.FilePath);
            if (context.Request.UrlReferrer.Host == null)
            {
                context.Response.ContentType = "image/JPEG";
                context.Response.WriteFile("~/no.gif");//被替换图片
            }
            else
            {
                if (context.Request.UrlReferrer.Host.IndexOf("localhost") > -1)//这里是你的域名
                {
                    context.Response.ContentType = "image/JPEG";
                    context.Response.WriteFile(FileName);
                }
                else
                {
                    context.Response.ContentType = "image/JPEG";
                    context.Response.WriteFile("~/no.gif");
                }
            }
        }
        public bool IsReusable
        {
            get { return true; }
        }
        public myhandler()
        {
        }
    }

    Default.aspx
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>清清月儿 http://blog.csdn.net/21aspnet</title</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <img src="pic130.jpg" /></div>
        </form>
    </body>
    </html>

    pic130.jpg

    no.gif

    IIS的配置:

    配置应用程序扩展:添加一个.jpg的扩展!

    注意:在本地的context.Request.UrlReferrer.Host就是localhost,
    我开始以为http://localhost/A/http://localhost/B/
    context.Request.UrlReferrer.Host,那就是大错特错。http://localhost/A/http://localhost/B/的context.Request.UrlReferrer.Host都是localhost,所以测试一个用localhost,所以,本地测试用机器名例如我的是hm测试即可。经过处理后用机器名访问就不行,虽然还是同一个站点,同一个文件,此处请多注意。

    下面是怎么防rar文件不从主站下载:方法和图片类似,不过下载我们强迫他们到我们站点。

    1、  首先创建一个类库项目ClassLibrary1:

    using System;

    using System.Web;    // 引用System.Web组件

     

     

     public class MyHandler : IHttpHandler

     {

      public MyHandler()

      {

      }

     

      #region IHttpHandler 成员

      public void ProcessRequest(HttpContext context)

      {

       // 跳转到WebForm1.aspx,由WebForm1.aspx输出rar文件

       HttpResponse response = context.Response;

       response.Redirect("../manage/downloads.aspx");

      }

     

      public bool IsReusable

      {

       get

       {

        // TODO:  添加 MyHandler.IsReusable getter 实现

        return true;

       }

      }

      #endregion

     }

     

    2、  在配置文件Web.config文件节点里增加如下节点:

     <httpHandlers>
          <add verb="*" path="*.rar" type="myhandler,App_Code"/>
        </httpHandlers>

    3、  在WebForm1.aspx里增加一个文本为“下载”的Button,其Click事件如下:

    注意别忘记了using System.IO;

    private void Button1_Click(object sender, System.EventArgs e)
      {
       FileInfo file = new System.IO.FileInfo(Server.MapPath("1.rar"));
       Response.Clear();

       Response.AddHeader("Content-Disposition", "filename=" + file.Name);

       Response.AddHeader("Content-Length", file.Length.ToString());

       string fileExtension = file.Extension;

     

       // 根据文件后缀指定文件的Mime类型

       switch (fileExtension)

       {

        case ".mp3":

         Response.ContentType = "audio/mpeg3";

         break;

        case "mpeg":

         Response.ContentType = "video/mpeg";

         break;

        case "jpg":

         Response.ContentType = "image/jpeg";

         break;

        case "........等等":

         Response.ContentType = "....";

         break;

        default:

         Response.ContentType = "application/octet-stream";

         break;

       }

     

       Response.WriteFile(file.FullName);

       Response.End();
     
      }

    4、  最后一步就是在IIS里增加一个应用程序扩展。在“默认网站”->“属性”->“主目录”->“配置”。在弹出的“应用程序配置”窗口里按“添加”,在弹出的“添加/编辑应用程序扩展名映射”窗口里“可执行文件”选择C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,在扩展名里输入“.rar”,然后确定即可。

    5、  在IE里输入http://localhost/web/1.rar,会立即跳转到http://localhost/web/WebForm1.aspx,然后按WebForm1.aspx的“下载”按钮就可以下载1.rar了。

    http://blog.csdn.net/xingkongmanbu/archive/2007/04/06/1554958.aspx

    转自: http://blog.csdn.net/skyaspnet/archive/2008/05/22/2469738.aspx

    posted @ 2008-06-03 15:10 zhangsir 阅读(11) | 评论 (0)编辑
     
    常用表达式:

    "^\d+$"  //非负整数(正整数 + 0) 
    "^[0-9]*[1-9][0-9]*$"  //正整数 
    "^((-\d+)|(0+))$"  //非正整数(负整数 + 0) 
    "^-[0-9]*[1-9][0-9]*$"  //负整数 
    "^-?\d+$"    //整数 
    "^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0) 
    "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数 
    "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮点数(负浮点数 + 0) 
    "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数 
    "^(-?\d+)(\.\d+)?$"  //浮点数 
    "^[A-Za-z]+$"  //由26个英文字母组成的字符串 
    "^[A-Z]+$"  //由26个英文字母的大写组成的字符串 
    "^[a-z]+$"  //由26个英文字母的小写组成的字符串 
    "^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串 
    "^\w+$"  //由数字、26个英文字母或者下划线组成的字符串 
    "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址 
    "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url
    /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日
    /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年
    "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"   //Emil
    "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?"     //电话号码
    "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$"   //IP地址

    匹配中文字符的正则表达式: [\u4e00
    -\u9fa5]
    匹配双字节字符(包括汉字在内):[
    ^\x00-\xff]
    匹配空行的正则表达式:\n[\s
    | ]*\r
    匹配HTML标记的正则表达式:
    /<(.*)>.*<\/\1>|<(.*) \/>/
    匹配首尾空格的正则表达式:(
    ^\s*)|(\s*$)
    匹配Email地址的正则表达式:\w
    +([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    匹配网址URL的正则表达式:
    ^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$
    匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    匹配国内电话号码:(\d{
    3}-|\d{4}-)?(\d{8}|\d{7})?
    匹配腾讯QQ号:
    ^[1-9]*[1-9][0-9]*$


    元字符及其在正则表达式上下文中的行为: 

    \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

    ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。 

    $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。 

    * 匹配前面的子表达式零次或多次。 

    + 匹配前面的子表达式一次或多次。+ 等价于 {1,}。 

    ? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。 

    {n} n 是一个非负整数,匹配确定的n 次。

    {n,} n 是一个非负整数,至少匹配n 次。 

    {n,m} m 和 n 均为非负整数,其中n 
    <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。

    ? 当该字符紧跟在任何一个其他限制符 (*+?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。 

    . 匹配除 
    "\n" 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符,请使用象 ’[.\n]’ 的模式。 
    (pattern) 匹配pattern 并获取这一匹配。 

    (
    ?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。 

    (
    ?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 

    (
    ?!pattern) 负向预查,与(?=pattern)作用相反 

    x
    |y 匹配 x 或 y。 

    [xyz] 字符集合。 

    [
    ^xyz] 负值字符集合。 

    [a
    -z] 字符范围,匹配指定范围内的任意字符。 

    [
    ^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。 

    \b 匹配一个单词边界,也就是指单词和空格间的位置。

    \B 匹配非单词边界。 

    \cx 匹配由x指明的控制字符。 

    \d 匹配一个数字字符。等价于 [
    0-9]。 

    \D 匹配一个非数字字符。等价于 [
    ^0-9]。 

    \f 匹配一个换页符。等价于 \x0c 和 \cL。 

    \n 匹配一个换行符。等价于 \x0a 和 \cJ。 

    \r 匹配一个回车符。等价于 \x0d 和 \cM。 

    \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。 

    \S 匹配任何非空白字符。等价于 [
    ^ \f\n\r\t\v]。 

    \t 匹配一个制表符。等价于 \x09 和 \cI。 

    \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。 

    \w 匹配包括下划线的任何单词字符。等价于’[A
    -Za-z0-9_]’。 

    \W 匹配任何非单词字符。等价于 ’[
    ^A-Za-z0-9_]’。 

    \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。

    \num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。 

    \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (
    0-7),则 n 为一个八进制转义值。 

    \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (
    0-7),则 \nm 将匹配八进制转义值 nm。 

    \nml 如果 n 为八进制数字 (
    0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。 

    \un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字符。

    匹配中文字符的正则表达式: [u4e00
    -u9fa5]

    匹配双字节字符(包括汉字在内):[
    ^x00-xff]

    匹配空行的正则表达式:n[s
    | ]*r

    匹配HTML标记的正则表达式:
    /<(.*)>.*</1>|<(.*/>/ 

    匹配首尾空格的正则表达式:(
    ^s*)|(s*$)

    匹配Email地址的正则表达式:w
    +([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

    匹配网址URL的正则表达式:http:
    //([w-]+.)+[w-]+(/[w- ./?%&=]*)?

    利用正则表达式限制网页表单里的文本框输入内容:

    用正则表达式限制只能输入中文:onkeyup
    ="value=value.replace(/[^u4E00-u9FA5]/g,'')" ōnbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"

    用正则表达式限制只能输入全角字符: ōnkeyup
    ="value=value.replace(/[^uFF00-uFFFF]/g,'')" ōnbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"

    用正则表达式限制只能输入数字:onkeyup
    ="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

    用正则表达式限制只能输入数字和英文:onkeyup
    ="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))" 

    附加:

    0.只能输入正整数 已经常用的正则表达式:
    <input type='text' id='SYS_PAGE_JumpPage' name='SYS_PAGE_JumpPage' size='3' maxlength='5' onkeyup='this.value=this.value.replace(/[^1-9]\D*$/,"")' ondragenter="return false" onpaste="return !clipboardData.getData('text').match(/\D/)"" style="ime-mode:disabled;">

     

     

    1.只能输入数字和英文的:
    <input onkeyup="value=value.replace(/[\W]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text1" NAME="Text1">

    2.只能输入数字的:
    <input onkeyup="value=value.replace(/[^\d]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text2" NAME="Text2">

    3.只能输入全角的:
    <input onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))" ID="Text3" NAME="Text3">

    4.只能输入汉字的:
    <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" ID="Text4" NAME="Text4">

    5.邮件地址验证:
    var regu = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT)$"
    var re = new RegExp(regu);
    if (s.search(re) != -1) {
    return true;
    } else {
    window.alert ("请输入有效合法的E-mail地址 !")
    return false;
    }

    6.身份证:
    "^\\d{17}(\\d|x)$"

    7.17种正则表达式
    "^\\d+$"  //非负整数(正整数 + 0)
    "^[0-9]*[1-9][0-9]*$"  //正整数
    "^((-\\d+)|(0+))$"  //非正整数(负整数 + 0)
    "^-[0-9]*[1-9][0-9]*$"  //负整数
    "^-?\\d+$"    //整数
    "^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0)
    "^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数
    "^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0)
    "^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数
    "^(-?\\d+)(\\.\\d+)?$"  //浮点数
    "^[A-Za-z]+$"  //由26个英文字母组成的字符串
    "^[A-Z]+$"  //由26个英文字母的大写组成的字符串
    "^[a-z]+$"  //由26个英文字母的小写组成的字符串
    "^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
    "^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串
    "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址
    "^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url

    =============================================

    1.取消按钮按下时的虚线框
      在input里添加属性值   hideFocus 或者 HideFocus=true
      
    2.只读文本框内容
       在input里添加属性值   readonly
      
    3.防止退后清空的TEXT文档(可把style内容做做为类引用)
      <INPUT style=behavior:url(#default#savehistory); type=text id=oPersistInput>
      
    4.ENTER键可以让光标移到下一个输入框
      <input onkeydown="if(event.keyCode==13)event.keyCode=9" >
      
    5.只能为中文(有闪动)
      <input onkeyup="value="/value.replace(/[" -~]/g,’’)" onkeydown="if(event.keyCode==13)event.keyCode=9">
      
    6.只能为数字(有闪动)
      <input onkeyup="value="/value.replace(/["^\d]/g,’’) "onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\d]/g,’’))">
      
    7.只能为数字(无闪动)
      <input ime-mode:disabled" onkeydown="if(event.keyCode==13)event.keyCode=9" onKeyPress="if ((event.keyCode<48 || event.keyCode>57)) event.returnValue=false">
      
    8.只能输入英文和数字(有闪动)
      <input onkeyup="value="/value.replace(/[\W]/g,"’’)" onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\d]/g,’’))">
      
    9.屏蔽输入法
      <input type="text" name="url" ime-mode:disabled" onkeydown="if(event.keyCode==13)event.keyCode=9">
      
    10. 只能输入 数字,小数点,减号(-) 字符(无闪动)
      <input onKeyPress="if (event.keyCode!=46 && event.keyCode!=45 && (event.keyCode<48 || event.keyCode>57)) event.returnValue=false">
      
    11. 只能输入两位小数,三位小数(有闪动)
      <input maxlength=9 onkeyup="if(value.match(/^\d{3}$/))value="/value.replace(value,parseInt(value/10))" ;value="/value.replace(/\.\d*\./g,’."’)" onKeyPress="if((event.keyCode<48 || event.keyCode>57) && event.keyCode!=46 && event.keyCode!=45 || value.match(/^\d{3}$/) || /\.\d{3}$/.test(value)) {event.returnValue=false}" id=text_kfxe name=text_kfxe>


    posted @ 2008-05-27 11:13 zhangsir 阅读(6) | 评论 (0)编辑

    Bitmap类的GetThumbnailImage方法可以从指定的图像文件中生成缩略图,但是这种方式生成的缩略图清晰度不稳定,有时生成的缩略图的质量很差——模糊不清!

    为什么会这样?为什么生成的图片是模糊的?

    像JPEG这样格式的图像可能把缩略图存在同一个文件中。如果我们使用System.Drawing.Bitmap的GetThumbnailImage方法会检测文件中是否存在缩略图,如果找到该缩略图,它就会返回你所设定的宽高的缩略图版本。如果图像的缩略图的版本比你要求的大小要小,就会发生如下问题:生成的缩略图就会变得模糊,我们知道拉伸一个图像会导致图像质量的下降。

    解决方案:

    解决方法十分简单!我们利用System.Drawing.Image对象来装载源图像,  把图像缩放到你需要的比例,而又能保持高质量,接着保存就搞定了!

    下面通过ASP .NET C#来演示代码片段:

    //你应该包含这些名称空间

    using System.Drawing;  

    using System.Drawing.Drawing2D

    //下面开始


    //本例中假定了两个变量:

    String src
    ="c:/myImages/a.jpg";   //源图像文件的绝对路径

    String dest
    ="c:/myImages/a_th.jpg";    //生成的缩略图图像文件的绝对路径

    int thumbWidth=132;    //要生成的缩略图的宽度

    System.Drawing.Image image 
    = System.Drawing.Image.FromFile(src); //利用Image对象装载源图像

    //接着创建一个System.Drawing.Bitmap对象,并设置你希望的缩略图的宽度和高度。

    int srcWidth=image.Width;
    int srcHeight=image.Height; 
    int thumbHeight=(srcHeight/srcWidth)*thumbWidth;
    Bitmap bmp 
    = new Bitmap(thumbWidth, thumbHeight); 

    //从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。

    System.Drawing.Graphics gr 
    = System.Drawing.Graphics.FromImage(bmp);

    //设置 System.Drawing.Graphics对象的SmoothingMode属性为HighQuality

    gr.SmoothingMode 
    = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

    //下面这个也设成高质量

    gr.CompositingQuality 
    = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

    //下面这个设成High

    gr.InterpolationMode 
    = System.Drawing.Drawing2D.InterpolationMode.High;

    //把原始图像绘制成上面所设置宽高的缩小图

    System.Drawing.Rectangle rectDestination 
    = new System.Drawing.Rectangle(00, thumbWidth, thumbHeight);
    gr.DrawImage(image, rectDestination, 
    00, srcWidth, srcHeight, GraphicsUnit.Pixel);

    //保存图像,大功告成!

    bmp.Save(dest);

    //最后别忘了释放资源
    bmp.Dispose();
    image.Dispose();


    参考:

    [记录]高品质图像保存代码 
     

    [C#]

    /**//// <param name="fileName">图像名</param>
    /// <param name="quality">品质</param>
    public static void SaveImage(string fileName, int quality)
    {
        
        Bitmap  myBitmap
    = new Bitmap(fileName);

       
        System.Drawing.Imaging.EncoderParameters myEncoderParameters 
    =
            
    new System.Drawing.Imaging.EncoderParameters(1);

        System.Drawing.Imaging.EncoderParameter myEncoderParameter 
    =
            
    new System.Drawing.Imaging.EncoderParameter(
            System.Drawing.Imaging.Encoder.Quality, quality);
      
        myEncoderParameters.Param[
    0= myEncoderParameter;

      
        System.Drawing.Imaging.ImageCodecInfo myImageCodecInfo;
        myImageCodecInfo 
    = GetEncoderInfo("image/jpeg");

       
        
    string ext = myImageCodecInfo.FilenameExtension.Split(';')[0];
        ext 
    = System.IO.Path.GetExtension(ext).ToLower();

        
    string saveName= System.IO.Path.ChangeExtension(fileName, ext);

        
    //保存
        myBitmap.Save(saveName, myImageCodecInfo, myEncoderParameters);
    }

    //获取MimeType
    private static System.Drawing.Imaging.ImageCodecInfo
        GetEncoderInfo(
    string mineType)
    {
        
        System.Drawing.Imaging.ImageCodecInfo [] myEncoders
    =
            System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
        
        
    foreach (System.Drawing.Imaging.ImageCodecInfo myEncoder in myEncoders)
            
    if (myEncoder.MimeType == mineType)
                
    return myEncoder;
        
    return null;
    }


    [VB.NET]


    Public Shared  Sub SaveImage()Sub SaveImage(ByVal fileName As String, _
            ByVal quality As Integer)
        
        Dim myBitmap As Bitmap 
    =  New Bitmap(fileName) 
     
        
        Dim myEncoderParameters As _
            New System.Drawing.Imaging.EncoderParameters(
    1
        
        Dim myEncoderParameter As _
            New System.Drawing.Imaging.EncoderParameter( _
            System.Drawing.Imaging.Encoder.Quality,quality) 
        
        myEncoderParameters.Param(
    0= myEncoderParameter

        
        Dim myImageCodecInfo As System.Drawing.Imaging.ImageCodecInfo
        myImageCodecInfo 
    = GetEncoderInfo("image/jpeg")
     
        
        Dim ext As String 
    =  myImageCodecInfo.FilenameExtension.Split(";"c)(0
        ext 
    = System.IO.Path.GetExtension(ext).ToLower()
     
        
        Dim saveName As String 
    = _
            System.IO.Path.ChangeExtension(fileName, ext) 
     
        
    '保存
        myBitmap.Save(saveName, myImageCodecInfo, myEncoderParameters)
    End Sub
     
    '获取MimeType
    Private Shared Function GetEncoderInfo()Function GetEncoderInfo(ByVal mineType As String) _
            As System.Drawing.Imaging.ImageCodecInfo
        
        Dim myEncoders() As System.Drawing.Imaging.ImageCodecInfo 
    = _
            System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders() 
        
        Dim myEncoder As System.Drawing.Imaging.ImageCodecInfo
        For Each myEncoder In myEncoders
            If myEncoder.MimeType 
    = mineType Then
                Return myEncoder
            End If
        Next
        Return Nothing
    End Function


     

    posted @ 2008-05-23 16:02 zhangsir 阅读(38) | 评论 (0)编辑