zoukankan      html  css  js  c++  java
  • XML中配置正则表达式的写法

         在做WEB表单时,为了增加用户体验,表单验证通常是必不可少的。而这样的效果通常也是通过正则表达式实现。

    如果在往前考虑一步,假如用户自己也能根据需要修改这些正则表达式,那就更加人性化了。

         在做管理系统时,除了数据库,我们用的最多的恐怕就是XML文件了,由于操作简单,我们喜欢用XML作为模版的

    配置文件。这里主要强调在XML中配置正则表达式的写法,笔者确实走了一些弯路。

         因为XML(HTML)中,<,>,&有特殊的意义,(前两个字符用于链接签,&用于转义)不能直接使用。

       

         XML CDATA是什么?

         CDATA部件

         在CDATA内部的所有内容都会被解析器忽略。

         如果文本内容包含了很多的"<"字符和"&"字符——就像程序代码一样,那么最好把他们都放到CDATA部件中.

    一个CDATA部件以"<![CDATA["标记开始,以"]]>"标记结束。
    CDATA是通过解析器进行的文本,文本中的标签不被看作标记。

         于是,正确的写法

        笔者自己也写了一个简单的Demo.

     View

    View Code
     1 <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
     2 
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     4 <html xmlns="http://www.w3.org/1999/xhtml">
     5 <head runat="server">
     6     <title>后台获取配置文件正则表达式</title>
     7     <link href="<%=Url.Content("~/Scripts/ext-3.4.0/resources/css/ext-all.css") %>" rel="stylesheet" type="text/css" />
     8     <script src="<%=Url.Content("~/Scripts/ext-3.4.0/adapter/ext/ext-base.js") %>" type="text/javascript"></script>
     9     <script src="<%=Url.Content("~/Scripts/ext-3.4.0/ext-all.js") %>" type="text/javascript"></script>
    10     <script src="<%=Url.Content("~/Scripts/Widget/CRegular.js") %>" type="text/javascript"></script>
    11 
    12     <script language="javascript" type="text/javascript">
    13 
    14         Ext.onReady(function () {
    15 
    16             Ext.QuickTips.init();
    17 
    18             Regular.GetFormPanel();
    19 
    20         });
    21 
    22     </script>
    23 </head>
    24 <body>
    25     <div id="form" style="margin: 100px;">
    26     </div>
    27 </body>
    28 </html>

    Controller

    View Code
    /// <summary>
            /// 获取配置文件中的正则表达式
            /// </summary>
            /// <returns>正则表达式</returns>
            public JsonResult GetoRegular()
            {
                var strRegular = string.Empty;
    
                //1.获取用例字段的XML
                var oFormFields = XElement.Load(@"E:\201206112300ExMVC项目\Lucky\Lucky\Content\Regular.xml");
    
                //从配置文件获取正则表达式
                var oRegexQuery = from c in oFormFields.Elements("Regular")
                                  where c.Attribute("name").Value == "NameValidation"
                                  select c;
    
                foreach (var oRegex in oRegexQuery)
                {
                    strRegular = oRegex.Value;
                }
    
                return Json(strRegular, JsonRequestBehavior.AllowGet);
            }

    js

    View Code
    View Code 
    /**
    * Author:LuckyHu
    */
    Ext.namespace("Lucky");
    Lucky.CRegular = function () {
    
        /**
        * 获取Form
        */
        this.GetFormPanel = function () {
    
            //1.获取正则表达式
            var strRegular = Regular.GetoRegular();
            var oRegular = new RegExp(strRegular,"");
    
            //2.获取Form
            var form = new Ext.form.FormPanel({
                defaultType: 'textfield',
                labelAlign: 'right',
                title: 'form',
                labelWidth: 50,
                frame: true,
                 220,
                //url: 'form.jsp',
    
                items: [{
                    fieldLabel: '文本框',
                    name: 'text',
                    //regex: /^[\u4E00-\u9FA5]+$/,
                    regex: oRegular,
                    regexText: '只能输入汉字'
                }],
                buttons: [{
                    text: '按钮',
                    handler: function () {
                        form.getForm().submit();
                    }
                }]
            });
    
            form.render("form");
    
            return form;
        }
    
        /**
        * ajax同步请求
        * 获取正则表达式
        */
        this.GetoRegular = function () {
    
            var obj;
            var value;
            var strParamer = "1";
            var strUrl = '../Regular/GetoRegular?strParamer=' + strParamer;
    
            if (window.ActiveXObject)
                obj = new ActiveXObject('Microsoft.XMLHTTP');
            else if (window.XMLHttpRequest)
                obj = new XMLHttpRequest;
    
            obj.open('POST', strUrl, false);
            obj.setRequestHeader('Contnent-Type', 'application/', 'application/x-www-form-urlencoded');
            obj.send(null);
    
            var oRegular = Ext.util.JSON.decode(obj.responseText);
    
            return oRegular;
        }
    
    }
    
    /**
    * CRegular 单例对象
    */
    var Regular = new Lucky.CRegular();

    Regular.xml

    View Code
    <?xml version="1.0" encoding="utf-8" ?>
    <!--1.解决XML配置文件中配置正则表达式的最优方案
    如果文本内容包含了很多的"<"字符和"&"字符——就像程序
    代码一样,那么最好把他们都放到CDATA部件中.
    一个CDATA部件以"<![CDATA["标记开始,以"]]>"标记结束。
    CDATA是通过解析器进行的文本,文本中的标签不被看作标记。
    -->
    <Regulars>
      <Regular name="NameValidation"><![CDATA[^[\u4E00-\u9FA5]+$]]></Regular>
    </Regulars>
  • 相关阅读:
    联表查询用on和where的区别
    了解触发器
    QUIC协议,了解
    SQL Mode
    redis持久化
    Kali Linux渗透测试实战 1.2 环境安装及初始化
    电容降压
    单火取电
    大整数的因子
    最大公约数
  • 原文地址:https://www.cnblogs.com/lucky_hu/p/2845014.html
Copyright © 2011-2022 走看看