JavaScript中两个字符串的匹配


Posted in Javascript onJune 08, 2016

工作中遇到一个问题,两个字符串匹配,要求:每个字符串中最多含有一个*,?可以无限多个

*代表一个任意长度的字符串,而?则代表一个字符

要求可以提示出两个冲突

<input type="text" id="str1"><br>

<input type="text" id="str2"><br>

<input type="button" onclick="checkMarchX()" value="CHECK">

用JavaScript实现代码如下:

function checkMarchX()
{
	var str1 = document.getElementById('str1').value;
	var str2 = document.getElementById('str2').value;
	var str1XPosition = str1.indexOf('*');
	var str2XPosition = str2.indexOf('*');
	if(str1XPosition!=-1 && str2XPosition!=-1)//两者都含有*
	{
		var position = str1XPosition>str2XPosition?str2XPosition:str1XPosition;//success
		if(position!=0)
		{
			var patbeforeStr1 = str1.substring(0,position);
			var patbeforeStr2 = str2.substring(0,position);
			if(checkMarchQ(patbeforeStr1,patbeforeStr2))
			{
				//alert(str1+'与'+str2+"前半部分冲突");
				//然后对应后半部分进行测试
				var str1XBackPosition = str1.length-str1XPosition-1;
				var str2XBackPosition = str2.length-str2XPosition-1;
				var backposition = str1XBackPosition>str2XBackPosition?str2XBackPosition:str1XBackPosition;
				if (backposition==0)
				{
					alert(str1+'与'+str2+"冲突");
				}
				else
				{
					var patbackStr1 = str1.substring(str1.length-backposition,str1.length);
					var patbackStr2 = str2.substring(str2.length-backposition,str2.length);
					if(checkMarchQ(patbackStr1,patbackStr2))
					{
						alert(str1+'与'+str2+"冲突");
					}
				}
			}
		}
		else
		{
			//alert(str1+'与'+str2+"前半部分冲突");
			var str1XBackPosition = str1.length-str1XPosition-1;
			var str2XBackPosition = str2.length-str2XPosition-1;
			var backposition = str1XBackPosition>str2XBackPosition?str2XBackPosition:str1XBackPosition;
			if (backposition==0)
			{
				alert(str1+'与'+str2+"冲突");
			}
			else
			{
				var patbackStr1 = str1.substring(str1.length-backposition,str1.length);
				var patbackStr2 = str2.substring(str2.length-backposition,str2.length);
				if(checkMarchQ(patbackStr1,patbackStr2))
				{
					alert(str1+'与'+str2+"冲突");
				}
			}
		}
	}
	else if((str1XPosition==-1 && str2XPosition!=-1)||(str1XPosition!=-1 && str2XPosition==-1))//有且只有一个字符串含有*
	{
		var strX = str1XPosition==-1?str2:str1;//含有*的字符串
		var strNoX = str1XPosition==-1?str1:str2;//不含*的字符串
		if (strX.length-1<strNoX.length)
		{
			var position = strX.indexOf('*');
			if(position==0)
			{
				//alert(str1+'与'+str2+"前半部分冲突");
				var backposition = strX.length-position-1;
				if (backposition==0)
				{
					alert(str1+'与'+str2+"冲突");
				}
				else
				{
					var patbackStr1 = str1.substring(str1.length-backposition,str1.length);
					var patbackStr2 = str2.substring(str2.length-backposition,str2.length);
					if(checkMarchQ(patbackStr1,patbackStr2))
					{
						alert(str1+'与'+str2+"冲突");
					}
				}
			}
			else
			{
				var patbeforeStr1 = str1.substring(0,position);
				var patbeforeStr2 = str2.substring(0,position);
				if(checkMarchQ(patbeforeStr1,patbeforeStr2))
				{
					//alert(str1+'与'+str2+"前半部分冲突");
					var backposition = strX.length-position-1;
					if (backposition==0)
					{
						alert(str1+'与'+str2+"冲突");
					}
					else
					{
						var patbackStr1 = str1.substring(str1.length-backposition,str1.length);
						var patbackStr2 = str2.substring(str2.length-backposition,str2.length);
						if(checkMarchQ(patbackStr1,patbackStr2))
						{
							alert(str1+'与'+str2+"冲突");
						}
					}
				}
			}
		}
	}
	else
	{
		if(checkMarchQ(str1,str2))
		{
			alert(str1+'与'+str2+"冲突");
		}
	}
}
function checkMarchQ(str1,str2)
{
	var flagque = false;
	if(str1.length==str2.length)
	{
	  //长度相同才有可能冲突
		for (var i=0 ;i<str1.length ;i++ )
		{
			if(str1.substr(i,1)!='?' && str2.substr(i,1)!='?')
			{
				if(str1.substr(i,1)!=str2.substr(i,1))
				{
					flagque = false;//表示不冲突
					break;
				}
				else
				{
					flagque = true;//表示冲突
				}
			}
		}
	}
	return flagque;
}

其中*最起码为一个字符,以上程序并没有对输入的合法性进行验证

查看更多JavaScript的语法,大家可以关注:《JavaScript 参考教程》、《JavaScript代码风格指南》,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 弹出窗口中是否显示地址栏的实现代码
Apr 14 Javascript
input输入框的自动匹配(原生代码)
Mar 19 Javascript
jQuery实现瀑布流布局
Dec 12 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
Mar 23 Javascript
老生常谈JavaScript 函数表达式
Sep 01 Javascript
jQuery中$.grep() 过滤函数 数组过滤
Nov 22 Javascript
ReactNative实现图片上传功能的示例代码
Jul 11 Javascript
Vue中如何实现轮播图的示例代码
Jul 27 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
Dec 08 Javascript
Vue关于组件化开发知识点详解
May 13 Javascript
token 机制和实现方式
Dec 15 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
Jan 29 jQuery
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
Jun 08 #Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
Jun 08 #Javascript
玩转JavaScript OOP - 类的实现详解
Jun 08 #Javascript
Javascript之String对象详解
Jun 08 #Javascript
浅谈JavaScript函数的四种存在形态
Jun 08 #Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
Jun 08 #Javascript
关于session和cookie的简单理解
Jun 08 #Javascript
You might like
php操作xml入门之cdata区段
2015/01/23 PHP
php输出xml属性的方法
2015/03/19 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
Javascript this关键字使用分析
2008/10/21 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
微信小程序实现联动选择器
2019/02/15 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
Python爬虫模拟登录带验证码网站
2016/01/22 Python
Python的装饰器使用详解
2017/06/26 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
python爬虫实现中英翻译词典
2019/06/25 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
物业管理计划书
2014/01/10 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
会计工作总结范文2014
2014/12/23 职场文书
工程部岗位职责范本
2015/04/11 职场文书
大学生就业意向书
2015/05/11 职场文书
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python