JS截取字符串常用方法详细整理_javascript技巧

来源:脚本之家  责任编辑:小易  

如何攻破软件 James A.Whittaker 摘要 本文讨论一系列用于发现软件设计与开发中的缺陷的方法(所谓的“攻击”)。这些攻击 都是手工、探索性的测试方式,设计和执行都是动态的、几乎不需要额外开销。这些攻击是 经过对上百个真实的软件缺陷进行研究并且抽象出他们的成因和现象之后构造出来的。经过 佛罗里达理工学院软件测试方向的学员两个学期的细化分析,已经归纳了数十个旨在发现缺 陷的攻击策略。这些攻击策略被证明非常受用,已经发现了上百个额外的缺点—都是由这 些攻击策略直接导致的—在短时间内对产品几乎没有任何了解的情况下。本文介绍上述攻 击策略的一个子集并说明他们是如何在已发布产品中发现真实缺陷。简介 是什么成就了一名优秀的测试人员?是什么样的天赋使他们对bug 如此敏感?这样的 能力是可以传授的吗?这些问题就是本文的主旨。我相信优秀的测试人员更多是后天造就而不是先天生成的,事实上,多年下来许多测试人员自己似乎积累了一个攻击策略的标准库。每当他们面临测试 难题时就会重组手头的攻击策略,从而总是能够发现缺陷。尽管这些攻击策略很少被记录下 来,它们确确实实在手工测试和测试传承中扮演着重要的角色。通过对真实的测试人员和现实缺陷的研究,我们开始着手文档化这一财富。在本文中,我们探索来自于该项工程的一部分成果。下一个挑战是对这些攻击施行自动化,找到有效使 用的具体策略。攻击无异于以下三个大类: 输入/输出攻击  数据攻击  运算攻击 每个类型中都有特定类型的攻击,它们导致十分有趣的软件故障。在之后的部分我以具 体的缺陷为例介绍每个大类下的攻击类型。涉及到的bug 都来自于微软公司的产品。我认为 这不该被看作是一种反微软的行为。事实上,它作为软件行业霸主的事实使它自然而然地成 为了“众矢之的”。但不能就这样认为微软的产品相对于其他软件产商有更多的缺陷。本文 中提到的攻击策略几乎成功攻击过许多公司的软件产品,这些产品运行在你可以想到的任何 平台上。我的经验表明,不管开发人员开发的应用产品域是什么、使用的操作系统有什么差 异亦或是否发布源码,他们都在高频度地制造bugs。如果他们是web 开发人员,那就更不 用费心了,因为web 程序本身非常容易崩溃。输入/输出攻击 针对输入/输出的攻击就是测试人员所说的“黑盒”测试,因为不需要任何有关内部数 据或计算的信息来支持测试执行。事实上,这是测试中最常见的一种,因为阅读源码不仅乏 味、费时,并且通常收益甚微,除非你知道自己到底在寻找什么类型的bug(我们将在接下 来的两部分内容里讨论什么是你应该试图寻找的)。输入/输出攻击 单一输入攻击 迫使所有的报错信息出现 强制指定默认值 尝试所有可用的字符集 迫使输出区域大小改变 引发显示区域溢出 迫使屏幕刷新问题出现 输入值组合攻击 迫使无效输出出现 找出不能共存的输入值组合 输入序列攻击 迫使无效输出出现 多次重复同样的输入序列 单一输入攻击 这一类攻击是对使用单一输入(从变量输入的角度来说)的行为进行的检查。我们试图 发现在大部分数据都正常工作的情况下由一个单一的输入导致应用崩溃的情况。其实除了单 单从边界值上考虑以外还有很多别的方式来选择输入用例,特别是当你希望找到真正被开发 认可的bug,而不是仅仅作为未定义的需求而忽略掉。首先给出一些看 似简单但不易施行的 建议:确保所有的报错信息 都出现一遍。不能使程序正常 地中止或结束的通常 就是所谓的bug。很多 报错信息仅仅是迫使程序停止来显示一条报错信息,然后接着执行下一条输入或者直到定时 器超时而已。但是,也有其他一些报错信息则是来自于被程序抛出和异常处理器被执行引发 的异常。异常处理器(或中央错误处理线程)因其指针突然改变而数据状态不产生相应变化,通常会存在问题。异常处理器执行的瞬间,各种各样的数据问题接踵而至:文件未关闭、内 存未释放、数据未初始化。当控制重新回到主线程,很难判断错误处理器是在什么时刻被调 用,又会有怎样的遗留问题在等待粗心大意的开发人员:因为文件没有关闭导致打开文件失 败、在没有初始化前就开始使用数据。如果我们能确保在所有的报错信息都出现过之后系统 依然正常工作,那么也算是为用户省去了不少麻烦(更不用说我们的维护工程师了)。图1 展示了我的学生在微软 Word 2000 中发现的一个有趣的bug,一条错误提示不知为 何连续出现了两次。这个bug 是在通过单一输入攻击错误处理线程的过程中发现的。确保软件指定默认值。开发人员通常不记得在用户输入越界或给参数设置不合理的值时指定默认的值。有时候 强制设立默认值意味着什么也不做—然而正因为想不到,这一举措甚至难倒了优秀的开发 人员。例如,在Word 2000 中,如下对话框中有一个选择框,当不对其做任何修改时再次打 开对话框,该控件将消失。对比左右图片中的对话框。你发现什么控件消失了吗?有的时候指定默认值需要先改变值的当前设定,然后将其设定为一个不合理的值。这种 连续的转换保证了再转换成其他可用的值前是经过设置默认值。尝试输入变量的所有可用的字符集。有的输入问题很简单,特别是当你使用了类似$,%,#,引号等等字符时,这些字符在 许多编程语言中有特殊意义并且作为输入被读入时通常需要特殊处理。如果开发人员未考虑 这种情况,则这些输入可能导致程序的失败。通过改变输入内容的多少引发输出区域的改变。聚焦于输出本身是一种发现bug 颇有成效但是极少使用的方法。其思想是:先假定一种 表现为bug 的输出或者行为,然后寻找能够导致这种现场产生的输入。以上所述的一个简单 的攻击例子就是通过改变输入值和输入字符串的长度来引发输出区域大小的重新计算。一个很好的概念性例子是将时钟的时间设置为9:59,然后等待它转到10:00。一开始显 示区域是4 个字符长度而后来是5。反过来,我们设定时间为12:59(5 个字符),然后等待 其转变为1:00(4 个字符)。开发人员通常只会对初始化为空白的情况进行处理而不曾考虑 到显示区域已有数据的情况下如何更新该区域以显示不同长度的数据。举个例子,PowerPoint 中的“艺术字”功能中有个有趣的bug。假定我们输入下图中的 一个长的字符串。可以发现因为字符串太长,并不是整个字符串都能显示出来。但这不是问题的关键。点 击确认按钮时触发两个事件。首先,程序计算出需要的输出区域大小,然后将输入的文字填 充进去。现在,我们编辑该字符串,将它改为单个字符。可以发现尽管现在只有单个字符,字体大小也没有改变,但显示区域大小却没有发生改 变。进一步看。如果再次编辑该字符串为多行的字符串,输出结果更有意思。我想这部分已经介绍得比较清楚了,我们将进入下一部分。确保对显示区域的边界的检查。这是基于输出的另一种攻击思路,与之前的十分类似。然而,不同于之前着力于导致显 示区域内部出错,这次我们将精力集中在显示区域的外部。并且显示区域将不再重新计算显 示边界而仅仅是考虑边界溢出。再以PowerPoint 为例,我们可以先画一个文本框,然后输入一个带上标的字符串。放 大该字符串的字体使上标的上半部分被截断。这一问题将连同之后的相关问题一起说明。引发屏幕刷新问题。这是使用windows 图形用户界面的用户会遇到的主要问题。对开发人员来说,更是一 个大问题:过度的刷新将导致程序变慢,而不刷新又会导致大大小小的问题,小至要求用户 强制刷新,大到导致用户的操作失败。通常通过在屏幕上添加、删除和移动元素来触发页面刷新。这将导致背景重新绘制,如 果页面不能正确、及时地作出相应,那么这就是通常意义上的bug。其中,尝试变化所移动 的元素的距离是一种较好的方式,可以移动一点点,接着移动一大截,移动一两次,接着移 动很多次。接着说回上面例子中的带上标的字符串,试着每次用鼠标拖动它移动一些距离,就会发 现令人讨厌的问题,如下图所示。在Office 2000 中 经常出现的另一个与 屏幕刷新相关的问题 是文本的异常消失。这一讨厌的问题在 Word 的页面边界附近 出现。输入值组合攻击 第二类输入/输出 bug 主要针对多个共 同作用或相互影响的输入。例如,一个通过两个参数调用的API,其中一个参数的取值建立 在另一个参数取值的基础上。通常,bug 正是出在值组合上,因为代码的逻辑关系复杂。找出不能共存的输入值的组合。那么哪些值的组合是有问题的?这个问题目前还处于积极研究中,但是我们已经找到了 一个特别有效地方法,那就是先确定期望获得的输出,然后试着去找到对应的输入值的组合。尝试产生无效的输出。这是一种适用于测试人员对问题域十分清楚的有效攻击方法。例如,当你在测试一个计 算器并且清楚部分功能点的结果有限制时,试图找到超出范围的结果所对应的输入值组合是 值得的。但是,如果你不熟悉数学,那么这种努力很可能是浪费时间—你甚至可能将一个 不正确的结果当成正确的。有时候windows 本身会给出提示,告诉你哪些输入是相互关联的。此时,测试人员可 以去测试这些值的范围,并且尝试触犯既定的关系。输入序列攻击 软件中的输入就像一种正式的语言。单一的输入相当于组成语言的字母,输入的字符串 类似构成语言的句子。其中一些句子应该通过控件和输入区域的启用与禁用被过滤。通过尽 可能多地输入字符串、改变输入的顺序来测试这种问题。选择导致无效输出的输入序列。和上文描述这是一种找到问题输入组合的好方法一样,这同样是找出有问题的输入序列 的好方法。例如,当我们发现了Office 2000 中的一个导致文本消失的问题后,对PowerPoint 幻灯片中标题文本框进行攻击。如下的一组屏幕截图再现了一个特定的输入序列是如何导致 文本消失的。有趣的是仅仅将文本框旋转180 度并不能发现这个bug。必须按照这样的操作顺序:旋 转180 度后,再旋转10 度(或者更多)。逆向执行以上操作并不能修正这一问题,每当点击 标题外部区域,该标题内容就会消失。改变输入的顺序之所以善于发现bug 是因为很多操作自身成功执行的同时会遗留很多 问题,它们将导致之后的操作失败。对..www.zgxue.com防采集请勿采集本网。

使用 substring()或者slice()

字符串比较时strcmp()和wcscmp()的返回结果相同,因此使排序变得更加容易。字节FF和FE在UTF-8编码中永远不会出现,因此他们可以用来表明UTF-16或UTF-32文本(见BOM)UTF-8 是字节顺序无关的。它的字节顺序

函数:split()

CMD命令即命令提示符,知CMD是command的缩写,是在OS/2,Win为基础的操作系统,包括Windows 2000和XP中,Vista中,和Server 2003 下的“MS-DOS方式”。中文版Windows XP中的命令提示符道进一步

功能:使用一个指定的分隔符把一个字符串分割存储到数组

这里整理了Excel中使用频率最高的函数的功能、使用方法,以及这些函数在实际应用中的实例剖析,并配有详细的介绍,希望可以帮到你。1、ABS函数 函数名称:ABS 主要功能:求出相应数字的绝对值。使用格式:

例子:

str=”jpg|bmp|gif|ico|png”;

下面我就小学阶段的说明文的方法及其作用进行整理,以便指导今后的教学。说明文是以说明为主要表达方式,对事物、事理进行介绍、解说的一种文体。常见的说明方法有举例子、引资料(引用)、分类别、列数字

arr=theString.split(”|”);

统计是研究如何合理收集、整理、分析数据的学科, 它可以为人们制定决策提供依据. 收集数据的基本方法有简单随机抽样、分层抽样、系统抽样. 故答案为:简单随机抽样、分层抽样、系统抽样.

//arr是一个包含字符值”jpg”、”bmp”、”gif”、”ico”和”png”的数组

函数:Join()

功能:使用您选择的分隔符将一个数组合并为一个字符串

例子:

复制代码 代码如下:

var delimitedString=myArray.join(delimiter);

var myList=new Array(”jpg”,”bmp”,”gif”,”ico”,”png”);

var portableList=myList.join(”|”);

//结果是jpg|bmp|gif|ico|png

函数:substring()

功能:字符串截取,比如想从"MinidxSearchEngine”中得到"Minidx”就要用到substring(0,6)

函数:indexOf()

功能:返回字符串中匹配子串的第一个字符的下标

复制代码 代码如下:

var myString=”JavaScript”;

var w=myString.indexOf(”v”);w will be 2

var x=myString.indexOf(”S”);x will be 4

var y=myString.indexOf(”Script”);y will also be 4

var z=myString.indexOf(”key”);z will be -1

续:

1.substring 方法

定义和用法

substring 方法用于提取字符串中介于两个指定下标之间的字符。

语法

stringObject.substring(start,stop)

参数 描述

start 必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。

stop 可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。如果省略该参数,那么返回的子串会一直到字符串的结尾。

返回值

一个新的字符串,该字符串值包含 stringObject 的一个子字符串,其内容是从 start 处到 stop-1 处的所有字符,其长度为 stop 减 start。

说明

substring 方法返回的子串包括 start 处的字符,但不包括 end 处的字符。

如果 start 与 end 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。

如果 start 比 end 大,那么该方法在提取子串之前会先交换这两个参数。

如果 start 或 end 为负数,那么它将被替换为 0。

2.substr 方法

定义和用法

substr 方法用于返回一个从指定位置开始的指定长度的子字符串。

语法

stringObject.substr(start [, length ])

参数 描述

start 必需。所需的子字符串的起始位置。字符串中的第一个字符的索引为 0。

length 可选。在返回的子字符串中应包括的字符个数。

说明

如果 length 为 0 或负数,将返回一个空字符串。

如果没有指定该参数,则子字符串将延续到stringObject的最后。

举例:

复制代码 代码如下:

var str = "0123456789";

alert(str.substring(0));------------"0123456789"

alert(str.substring(5));------------"56789"

alert(str.substring(10));-----------""

alert(str.substring(12));-----------""

alert(str.substring(-5));-----------"0123456789"

alert(str.substring(-10));----------"0123456789"

alert(str.substring(-12));----------"0123456789"

alert(str.substring(0,5));----------"01234"

alert(str.substring(0,10));---------"0123456789"

alert(str.substring(0,12));---------"0123456789"

alert(str.substring(2,0));----------"01"

alert(str.substring(2,2));----------""

alert(str.substring(2,5));----------"234"

alert(str.substring(2,12));---------"23456789"

alert(str.substring(2,-2));---------"01"

alert(str.substring(-1,5));---------"01234"

alert(str.substring(-1,-5));--------""

alert(str.substr(0));---------------"0123456789"

alert(str.substr(5));---------------"56789"

alert(str.substr(10));--------------""

alert(str.substr(12));--------------""

alert(str.substr(-5));--------------"0123456789"

alert(str.substr(-10));-------------"0123456789"

alert(str.substr(-12));-------------"0123456789"

alert(str.substr(0,5));-------------"01234"

alert(str.substr(0,10));------------"0123456789"

alert(str.substr(0,12));------------"0123456789"

alert(str.substr(2,0));-------------""

alert(str.substr(2,2));-------------"23"

alert(str.substr(2,5));-------------"23456"

alert(str.substr(2,12));------------"23456789"

alert(str.substr(2,-2));------------""

alert(str.substr(-1,5));------------"01234"

alert(str.substr(-1,-5));-----------""

1、前期输入了一些正数数值,现在要把B列所有数值改为负数,先另找一个单元格输入-1。2、右键点击复制-1这个单元格。3、然后选中B列所有数值。4、点击右键,选择选择性粘贴,选择运算中的“乘”项。5、最后点击选择性粘贴上的确定,即可完成,看到了吧,所有数值变成负数了内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 利用js判断字符串是否含有数字与特殊字符的方法小结
  • javascript代码判断输入的字符串是否含有特殊字符和表情代码实例
  • javascript中字符串的常用操作方法及特殊字符
  • js实现用特殊符号替换字符串的中间部分区域的实例代码
  • jquery过滤特殊字符及js字符串转为数字
  • javascript 特殊字符串
  • js 提取某()特殊字符串长度的实例
  • 详解javascript对数组操作(添加/删除/截取/排序/倒序)
  • js中数组实现代码(倒序遍历数组,数组连接字符串)
  • js字符串倒序的实例代码
  • js截取与分割字符串常用技巧总结
  • js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
  • js+html5实现canvas绘制简单矩形的方法
  • javascript实现yield的方法
  • js调用后台、后台调用前台等方法总结
  • 深入浅析js的数组遍历方法(推荐)
  • 实用javascript调试技巧分享(小结)
  • 原生js中slice()方法和splice()区别
  • js简单数组排序操作示例【sort方法】
  • jquery与js实现颜色渐变的方法
  • 基于javascript实现百叶窗动画效果不只单纯flas可以实现
  • 深入分析javascript中的错误处理机制
  • 如何把excel表里面的数据全变成负数
  • 如何攻破软件
  • 系统优化主要包括哪几个方面?
  • js数组添加元素
  • 在字符编码格式选项里UTF-8(无BOM)是什么意思呀?
  • CMD常用命令大全
  • Excel常用函数功能?
  • 小学的说明方法(9种)
  • 常见的三种抽样的方法是
  • 电脑运行cmd命令
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础知识javascript类库表单特效广告代码网页特效黑客性质javascript技巧domnode.jsjs其它首页javascriptjavascript技巧利用js判断字符串是否含有数字与特殊字符的方法小结javascript代码判断输入的字符串是否含有特殊字符和表情代码实例javascript中字符串的常用操作方法及特殊字符js实现用特殊符号替换字符串的中间部分区域的实例代码jquery过滤特殊字符及js字符串转为数字javascript 特殊字符串js 提取某()特殊字符串长度的实例详解javascript对数组操作(添加/删除/截取/排序/倒序)js中数组实现代码(倒序遍历数组,数组连接字符串)js字符串倒序的实例代码js截取与分割字符串常用技巧总结js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例js+html5实现canvas绘制简单矩形的方法javascript实现yield的方法js调用后台、后台调用前台等方法总结深入浅析js的数组遍历方法(推荐)实用javascript调试技巧分享(小结)原生js中slice()方法和splice()区别js简单数组排序操作示例【sort方法】jquery与js实现颜色渐变的方法基于javascript实现百叶窗动画效果不只单纯flas可以实现深入分析javascript中的错误处理机制js刷新页面方法大全js中settimeout()的用法详解js截取字符串常用方法详细整理js页面跳转常用的几种方式js打开新窗口的2种方式js数组与字符串的相互转换方法js设置cookie、读取cookie、删除js 将json字符串转换为json对象的javascript深入理解js闭包js删除数组里的某个元素方法js 屏蔽键盘不可用与鼠标右键不可用的方法浅析js刷新框架中的其他页面 && 值得分享的bootstrap table使用教程简单谈谈javascript的同步与异步javascript函数获取事件源的小例子微信小程序实现无限滚动列表javascript私有变量实例详解javascript的数组与字典用法与遍历对象的layui实现下拉框三级联动js实现简单获取最近7天和最近3天日期的方
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved