XML中配置正则表达式的写法
在做WEB表单时,为了增加用户体验,表单验证通常是必不可少的。而这样的效果通常也是通过正则表达式实现。
如果在往前考虑一步,假如用户自己也能根据需要修改这些正则表达式,那就更加人性化了。
在做管理系统时,除了数据库,我们用的最多的恐怕就是XML文件了,由于操作简单,我们喜欢用XML作为模版的
配置文件。这里主要强调在XML中配置正则表达式的写法,笔者确实走了一些弯路。
因为XML(HTML)中,<,>,&有特殊的意义,(前两个字符用于链接签,&用于转义)不能直接使用。
XML CDATA是什么?
CDATA部件
在CDATA内部的所有内容都会被解析器忽略。
如果文本内容包含了很多的"<"字符和"&"字符——就像程序代码一样,那么最好把他们都放到CDATA部件中.
一个CDATA部件以"<![CDATA["标记开始,以"]]>"标记结束。
CDATA是通过解析器进行的文本,文本中的标签不被看作标记。
于是,正确的写法
笔者自己也写了一个简单的Demo.
View

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

/// <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 /** * 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

<?xml version="1.0" encoding="utf-8" ?> <!--1.解决XML配置文件中配置正则表达式的最优方案 如果文本内容包含了很多的"<"字符和"&"字符——就像程序 代码一样,那么最好把他们都放到CDATA部件中. 一个CDATA部件以"<![CDATA["标记开始,以"]]>"标记结束。 CDATA是通过解析器进行的文本,文本中的标签不被看作标记。 --> <Regulars> <Regular name="NameValidation"><![CDATA[^[\u4E00-\u9FA5]+$]]></Regular> </Regulars>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?