php正則測試工具,php 測試工具

本文目錄一覽:

求個正則表達式,驗證1個數字,整數10位以內,小數5位以內

暫時研究到這個:

^([-+]?\d{1,10})(\.\d{1,5})?$

請LZ看看是否適合。

說明一下:

[-+]? 匹配正負號

\d{1,10} 匹配1到10位數字

(\.\d{1,5})? 匹配小數,如果有小數點,則必須接1到5位的數字,只有小數點則不匹配

^和$當然就是匹配開始結束了

另外,LZ可以下個RegexTester(正則表達式測試器),很不錯的工具

順表也貼上測試代碼吧(PHP)

function check($num) { //檢查函數

$reg = ‘/^([-+]?\d{1,10})(\.\d{1,5})?$/’; //正則表達式

if(preg_match($reg, $num)) {

echo ‘the num: ‘ . $num . ‘ —- yes!

‘;

} else {

echo ‘the num: ‘ . $num . ‘ —- no!

‘;

}

}

$numbers = array( //一些測試數據

1 = -0.14,

2 = +0.14,

3 = 1234567891,

4 = 12345678912,

5 = 123456.123,

6 = 123456,123456,

7 = 1234.,

8 = 0000.12345,

9 = 0.123456

);

array_walk($numbers, ‘check’); //對個數組中的每個值執行check函數

比較常用的幾個PHP開發工具

1、瀏覽器擴展組件工具(Firefox擴展)–

FirePHP FirePHP是一款基於Firebug的擴展,phpLangEditor 一款PHP函數庫解釋工具。 PHP Lookup :是一個內置的搜索欄,以幫助您快速查找引用的PHP語法。 PHP ManualSearch :一個方便的搜索欄,從您的Web瀏覽器中搜索官方PHP文檔。

2、PHP代碼調試工具–

Webgrind Webgrind完美支持PHP 5,安裝迅速簡便,可以跨越多個平台運行。 Xdebug Xdebug是使用極為廣泛的PHP代碼調試工具,它提供大量的工具幫助你找出程序中潛在的BUG,並且它得到了很多PHP開發工具的支持,以做為專門的測試工具繼承在這些開發工具中,比如PHPEclipse、phpDesigner等。

3、PHP框架支持–

Dwoo :PHP5 的模板引擎。CodeIgniter 用于敏捷軟體開發的PHP框架。 YII Framework :一個高性能的基於組件的PHP框架。 NetBeans :強大的PHP擴展框架支持集,擁有完善的GUI界面,獨自成為一款強大的PHP開發工具。 Solar symfony :一個開源的PHP Web框架,加速Web應用程序開發的創建與維護。

4、PHP代碼測試、優化工具–

PHPUnit :一款基於PHP 5的JUnit組件測試工具。 SimpleTest SimpleTest是一款高度集成的PHP代碼測試工具。 Selenium :一款專業全自動WEB站點PHP代碼測試工具,比較側重的UI輸入輸出數據測試。PHP_CodeSniffer dBug 一款專註於測試類、對象、數組以及XML文件的PHP工具。 PHP Profile Class

5、PHP擴展、工具集、類庫支持–

SimplePie 此工具可用於PHP RSS解析。 HTML Purifier :此工具可以用來移除所有惡意代碼(XSS),而且還能確保你的頁面遵循W3C的標準規範。 TCPDF :一個可以用於快速生成PDF文件的PHP5函數包。 htmlSQL :一組可以使你方便的對HTML和XML內容方便的使用類似SQL語句進行檢索的PHP類集。

6、PHP集成開發環境(IDE)、編輯器–

PHPEclipse 一個強大的Eclipse環境下開發PHP的插件,包括的主要功能有:PHP語法分析,調試,代碼格式化,大綱視圖,代碼模板定製等。 PhpED 一套Windows環境下的PHP集成開發環境。phpDesigner 一款輕量級的PHP集成開發工具,代碼編輯器功能特彆強大,支持在線預覽。 ZendStudio 一 款Eclipse下優秀的PHP開發環境,適用於開發包含豐富介面的RIAs應用程序。

7、PHP在線工具及資源–

Minify:該工具使用 PHP5 開發,用於合併壓縮js/css 文件的應用程序,合併壓縮之後的結果可通過 HTTP gzip/deflate 及一些相關頭,優化客戶端緩存。 HTTP_StaticMerger:CSS和java script文件自動”合併”。 PHP Object Generator 一款PHP代碼生成器,它能夠為你的PHP4/PHP5應用程序生成簡潔和可測試的面向對象代碼。

調用MYSQL 刪除HTML代碼並限制長度

public static function filter_newslink($aid){

$content = mod_news :: get_newscont($aid);

//先過濾圖片的外鏈 非貪婪匹配 普通正則用?,PHP用/U轉變是否貪婪

$content = preg_replace(‘/a([^]*)(img[^]*)\/a/iU’, ‘$2’, $content);

//再過濾文字的外鏈a title=”” href=””文字/a為文字

$content = preg_replace(‘/a([^]*)([^]*)\/a/iU’, ‘$2’, $content);

$data = array(‘news_id’ = $aid, “content” = $content);

$status = mod_news :: update_newscontent($data);

return $status;

}

貪婪匹配(Greedy)是最大匹配,例如對於html字元串:

nowamagic.net is a bgood/b website to blearn/b IT bskills/c.

通過正則b.*/b 默認匹配的結果為:

bgood/b website to blearn/b

但許多情況下我們想要的其實是bgood/b 和 blearn/b 兩個匹配

解決的辦法,就是上面說到的非貪婪匹配,即惰性匹配,它的語法如下表所示:

貪婪匹配 惰性匹配 匹配描述

? ?? 匹配 0 個或 1 個

+ +? 匹配 1 個或多個

* *? 匹配 0 個或多個

{n} {n}? 匹配 n 個

{n,m} {n,m}? 匹配 n 個或 m 個

{n,} {n,}? 匹配 n 個或多個

上述例子使用非貪婪匹配b.*?/b 得到的結果為兩個匹配,這次符合我們的需要了。

PHP正則表達式模式修正符:

i 正則內容在匹配時候不區分大小寫(默認是區分的)

m 在匹配首內容或者尾內容時候採用多行識別匹配

S 將轉義回車取消是為單行匹配如. 匹配的時候

x 忽略正則中的空白

A 強制從頭開始匹配

D 強制$匹配尾部無任何內容 \n

U 禁止貪婪匹配 只跟蹤到最近的一個匹配符並結束,常用在採集程序上的正則表達式

這裡是一個正則匹配的在線匹配測試工具:

替換文章的關鍵詞標籤可以使用MySQL導出後加工再導入資料庫,也可以使用存儲過程實現。這個的存儲過程簡單寫一下:

[sql] view plain copy

delimiter //

create procedure replaceAllTag()

begin

declare i INT;

while i =20 do

select replace(tag,”,i,”,”,COSTi,”) FROM `TBL_CMS_NEWS_bak` WHERE `col_id_related`=661 and tag like “%,i,%”;

set i=i+1;

end while;

end //

delimiter ;

在PhpMyAdmin中,drop procedure replaceAllTag 需要單獨執行,否則會報錯。存儲過程的語法請參照以下實例:

[sql] view plain copy

delimiter //

CREATE PROCEDURE `dadada` ()

BEGIN

DECLARE x INT;

DECLARE str VARCHAR(255);

SET x = 1;

SET str = ”;

WHILE x = 5 DO

SET str = CONCAT(str,x,’,’);

SET x = x + 1;

END WHILE;

SELECT str;

END //

delimiter ;

後來發現有些圖片沒有抓過來,而產品已經上線,重新抓取數據已是不現實的事情了。於是和同事協商後乾脆把圖片所在塊一起去掉。攻略文章不再展示「卡牌數值」的圖片表格。實現方法是採用MySQL的一些不太常用的函數。

[sql] view plain copy

SELECT replace(content,SUBSTRING(content FROM POSITION(“卡牌數值” IN content) FOR POSITION(“–” IN content)),”/span/h3/div”)

as x from CONTENT_TABLE c

where c.news_id in (select news_id from NEWS_TABLE where col_id = 66)

update CONTENT_TABLE c

set c.content = replace(c.content,SUBSTRING(c.content FROM POSITION(“卡牌數值” IN c.content) FOR POSITION(“–” IN c.content)),”/span/h3/div”)

where c.news_id in (select news_id from NEWS_TABLE where col_id = 66)

鑒於抓來的html結構比較亂比較複雜,也只能這樣了。儘管效率一般,不過相關的文章不過幾百篇,還可以接受的解決方法。關於其中涉及的SQL函數這裡再重溫學習一下:

一、MySQL中LOCATE和別名函數POSITION等

函數LOCATE(substr,str) 作用同POSITION(substr IN str)和INSTR(str,substr)

作用:返回子串 substr 在字元串 str 中第一次出現的位置。如果子串 substr 在 str 中不存在,返回值為 0;LOCATE還有一種形式,包含三個參數:LOCATE(substr,str,pos) ,其返回子串 substr 在字元串 str 中的第 pos 位置後第一次出現的位置。INSTR(str,substr)和LOCATE()的雙參數形式相同,只是參數順序不一樣而已。

mysql SELECT LOCATE(‘bar’, ‘foobarbar’);

– 4

mysql SELECT INSTR(‘foobarbar’, ‘bar’);

– 4

mysql SELECT LOCATE(‘xbar’, ‘foobar’);

– 0

mysql SELECT INSTR(‘xbar’, ‘foobar’);

– 0

mysql SELECT LOCATE(‘bar’, ‘foobarbar’, 7);

– 7

這個函數是多位元組安全的。在 MySQL 3.23 中,這個函數是字母大小寫敏感的,當在 MySQL 4.0 中時,如有任一參數是一個二進位字元串,它才是字母大小寫敏感的。

以下語句可以實現同樣的查詢功能:

SELECT `column` FROM `table` where `condition` like `%keyword%』

SELECT `column` from `table` where locate(『keyword』, `condition`)0

SELECT `column` from `table` where position(『keyword』 IN `condition`)

SELECT `column` from `table` where instr(`condition`, 『keyword』 )0

速度上後三個比使用 like 稍快了一點點。

二、MySQL的REPLACE用法

用法一:函數REPLACE(str,from_str,to_str)

在字元串 str 中所有出現的字元串 from_str 均被 to_str替換,然後返回這個字元串:

mysql select REPLACE(”, ‘a’, ‘list’);

例:把表table中的name欄位中的 ‘斗三國’替換為「全民斗三國」

mysql update table set name=replace(name,’斗三國’,’全民斗三國’)

這個函數也是多位元組安全的。

用法二:REPLACE INTO

在向表中插入數據的時候,經常遇到這樣的情況:1. 首先判斷數據是否存在; 2. 如果不存在,則插入;3.如果存在,則更新。包括我在內的程序猿們常見的做法有三種:

第一種:MySQL很常見的一種做法,許多新手、甚至許多資深的高級coder也有這麼寫的,會在代碼中封裝三個函數,一個函數查詢記錄是否存在,一個函數實現直接插入,另一個函數對已有記錄進行更新。在不同的情況進行調用。這種方法多次excute執行數據操作,勢必造成比較大的開銷。

第二種:用一條SQL代替三種情況的封裝,來實現按需操作,或插入新記錄,或更新舊數據。SQL Server中的語句如下:

IF NOT EXISTS(select 1 from NEWS_bak where news_id = 1008)

insert into NEWS_bak(title, keyword, description) values(‘孫權’, ‘三國’,’孫權-吳國老大’)

else

update NEWS_bak set title = ‘孫權’and keyword=’三國’ and description=’孫權-吳國老大’ where news_id = 1008

說明:對於IF NOT EXISTS的相同表達,MySQL一般用作條件WHERE NOT EXISTS();由於exists(SELECT NULL )也會返回true,故select exists(SELECT NULL )的結果為1。

但是在MySQL 中如何實現此邏輯呢?方法有,且語法更簡潔——replace into 。

MySQL replace into 有三種形式:

1. replace into tbl_name(col_name, …) values(…)

2. replace into tbl_name(col_name, …) select …

3. replace into tbl_name set col_name=value, …

前兩種形式使用頻度比較高。其中 「into」 關鍵字可以省略,不過最好加上 「into」,這樣意思更加直觀。所有列的值均取自在REPLACE語句中被指定的值。所有缺失的列被設置為各自的默認值,這和INSERT一樣。您不能從當前行中引用值,也不能在新行中使用值。如果您使用一個例如「SET col_name = col_name + 1」的賦值,則對位於右側的列名稱的引用會被作為DEFAULT(col_name)處理。因此,該賦值相當於SET col_name = DEFAULT(col_name) + 1。

舉例:

replace into tableName (id,index) values(‘1′,’index-A’),(‘2′,’index-B’)

此語句用於向表tableName中插入兩條記錄。 replace into 跟 insert 功能類似,不同點在於:replace into 首先嘗試插入數據到表中,如果發現表中已經有此行數據(根據主鍵或者唯一索引判斷)則先刪除此行數據,然後插入新的數據; 否則,直接插入新的數據。

為了能夠使用REPLACE,您必須同時擁有表的INSERT和DELETE許可權。

REPLACE語句會返回一個數,來指示受影響的行的數目。該數是被刪除和被插入的行數的和。如果對於一個單行REPLACE該數為1,則一行被插入,同時沒有行被刪除。如果該數大於1,則在新行被插入前,有一個或多箇舊行被刪除。如果表包含多個唯一索引,並且新行複製了在不同的唯一索引中的不同舊行的值,則有可能是一個單一行替換了多箇舊行。

PHP可以使用mysql_affected_rows()函數獲得受影響的行數。受影響的行數可以容易地確定是否REPLACE只添加了一行,或者是否REPLACE也替換了其它行:只需檢查該數是否為1(添加)或更大(替換)。

必須注意:插入數據的表必須有主鍵PRIMARY KEY或者是唯一索引UNIQUE!否則,使用一個REPLACE語句沒有意義。該語句會與INSERT相同,因為沒有索引被用於確定是否新行複製了其它的行。這時,replace into 會直接插入數據,這將導致表中出現重複的數據。

三、MySQL SUBSTRING 函數的使用

SUBSTRING ( expression , start , length )

參數:

expression 是字元串、二進位字元串、text、image、列或包含列的表達式。不要使用包含聚合函數的表達式。

start是一個整數,指定子串的開始位置。若為負數,則從字元串末尾倒數。

length是一個整數,可選,指定子串的長度(要返回的字元數或位元組數)。

函數共有4種格式:

SUBSTRING(str,pos) ,

SUBSTRING(str FROM pos) ,

SUBSTRING(str,pos,len) ,

SUBSTRING(str FROM pos FOR len)

不帶有len 參數的格式從字元串str返回一個子字元串,起始於位置 pos。帶有len參數的格式從字元串str返回一個長度同len字元相同的子字元串,起始於位置 pos。 使用 FROM的格式為標準 SQL 語法。也可能對pos使用一個負值。假若這樣,則子字元串的位置起始於字元串結尾的pos 字元,而不是字元串的開頭位置。在以下格式的函數中可以對pos 使用一個負值。

說明

由於在 text 數據上使用 SUBSTRING 時 start 和 length 指定位元組數,因此 DBCS 數據(如日本漢字)可能導致在結果的開始或結束位置拆分字元。此行為與 READTEXT 處理 DBCS 的方式一致。然而,由於偶而會出現奇怪的結果,建議對 DBCS 字元使用 ntext 而非 text 。

返回類型

如果 expression 是支持的字元數據類型,則返回字元數據。如果expression 是支持的 binary 數據類型,則返回二進位數據。一般實際使用中text 數據多以 varchar 的形式返回,image 數據則以 varbinary 的形式返回。

返回字元串的類型與給定表達式的類型相同(表中顯示的除外)。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/289454.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 03:02
下一篇 2024-12-24 03:02

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • 網站測試工具的詳細闡述

    一、測試工具的概述 在軟體開發的過程中,測試工具是一個非常重要的環節。測試工具可以快速、有效地檢測軟體中的缺陷,提高軟體的質量和穩定性。與此同時,測試工具還可以提高軟體開發的效率,…

    編程 2025-04-25
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台伺服器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24
  • 深入了解sed正則匹配

    一、sed 命令是什麼 sed(stream editor)是一種非互動式流式文本編輯器。它用於對文本進行編輯、轉換。sed 主要用於自動編輯。即通過腳本或命令直接對文本進行編輯。…

    編程 2025-04-24
  • Wi-Fi測試工具 – 常用工具和技巧

    現在Wi-Fi網路已經成為我們生活中的必備技術。Wi-Fi技術的廣泛應用和快速普及,使得無線網路性能和可靠性的測試變得越來越重要。在本文中,我們將介紹一些常用的Wi-Fi測試工具和…

    編程 2025-04-24

發表回復

登錄後才能評論