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,
            width: 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>

 

 

posted @ 2013-01-04 23:04  楠木大叔  阅读(3824)  评论(0编辑  收藏  举报