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.13333515.buzz防采集請勿采集本網。

使用 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.13333515.buzz請勿采集。


  • 本文相關:
  • 利用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.13333515.buzz All Rights Reserved
    3排列五开奖结果