2012年12月16日 星期日

表單驗證


Javascript 表單字串檢查



測試字串是否符合正規表示:

/**
* Check string
* @date 2012/08/13
* @by Ron Lee
*/

//letters and numbers and underscore
function validLiteral(INPUT) {
var pattern = /^(\w+)$/; // a-zA-Z0-9_
var result=pattern.test(INPUT);
return result;
}

//numbers
function validNum(INPUT) {
var pattern = /^(\d+)$/; // 0-9
var result = pattern.test(INPUT);
return result;
}

//account
function validAccount(INPUT) {
var pattern = /^[a-zA-Z]+([-_\.]\w+)*$/;
var result=pattern.test(INPUT);
return result;
}

//password
function validPassword(INPUT) {
var pattern = /^([^\'|\"]+)$/; // quote is not allowed
var result=pattern.test(INPUT);
return result;
}

//email
function validEmail(INPUT) {
var pattern = /^(\w+)([-\.\w]*)@([-\w]+)(\.[-\w]+)+$/i;
var result = pattern.test(INPUT);
return result;
}

//phone number
function validPhone(INPUT) {
var numExp = /([\d-]+)/; // phone number: numbers and hyphens: 12-3456-789
var result = pattern.test(INPUT);
return result;
}

//date
function validDate(year, month, day) {
var dateStr = (year+'/'+month+'/'+day).replace(/\b(\d)\b/g, '0$1');
if (!dateStr) return false;
if (!dateStr.match(/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/)) return false;
var dateObj = new Date(dateStr);
var get_dateStr = dateObj.getFullYear()+'/'+(dateObj.getMonth()+1)+'/'+dateObj.getDate();
get_dateStr = get_dateStr.replace(/\b(\d)\b/g, '0$1');
//document.write(dateStr+'<BR>'+get_dateStr+'<BR>');
return dateStr==get_dateStr;
}
function addTimeZero(dateString){
return document.write(dateString.replace(/\b(\d)\b/g, '0$1'));
}
//file name in url
function getUrlFilename(INPUT) {
var url = window.location.toString();
var result= url.split(/(\\|\/)/g).pop();
return result;
}




2012年12月9日 星期日

PHPMailer

PHPMailer 不知道發生了什麼事,現在網站的下載連結都是錯。點擊 download,不管是哪一個:

PHPMailer for PHP4

PHPMailer for PHP5/6

PHPMailer-FE (Form2Email)

PHPMailer-ML

PHPMailer-BMH

全部都會連到PHP4 的舊版 。不過首頁倒是提供一個連結到 code.google.com 的網站,在這裡可以下載新版 PHPMailer 。目前是 5.2.2



Updated for PHPMailer v5.0.0 (官網,函數說明)



其它參考:

PHPMailer介紹與使用 (派克空間)

實作PHPMailer郵件函式庫 (雖然是 2007 年的文章,但距今2012,差別不大)

利用 phpmailer 透過 gmail 寄信 (使用 465 port, openssl )

PHPMailer tutorial (AskApache 的教學,英文)

2012年10月20日 星期六

PHP去除指定的html標籤





創建 test.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
aaa
<strong>strong</strong>
bbb
<em>em</em>
ccc
<script type="text/javascript" src="/script1.js"></script>
<script type="text/javascript" src="/script2.js">/* inside script, same line */</script>
ccc
<script type="text/JavaScript">
/* inside script, change line */
</script>
ddd
</body>
</html>


php 程式碼

<?php
$filename = "test.html";
$handle = fopen("$filename","r");
$Data = fread($handle, filesize($filename));
$newData = strip_only_tags($Data, 'script', 0);
fclose($handle );
print_r($newData);

function strip_only_tags($source, $tag, $stripContent=FALSE){

//不成對的標籤
$nonPair = array('img', 'br');
if(in_array($tag, $nonPair)){
$pattern = '#(<'.$tag.'(.*)>)#';
$str = preg_replace($pattern, '', $str);
continue;
}

$newData = '';
$restData = $source;
while(1){
//找出起始標籤
$pattern = '#<'.$tag.'[^>]*>#';
$isMatch = preg_match($pattern, $restData, $matches);

if($isMatch){
$posStart = strpos($restData, $matches[0]);
$len = strlen($matches[0]);
$posEnd = $posStart + $len;
$newData .= substr($restData, 0, $posStart);
$restData = substr($restData, $posEnd);

//找出結尾標籤,並計算長度
$pattern = '#</.*'.$tag.'[^>]*>#';
preg_match($pattern, $restData, $matches);
$endTag = $matches[0];

$posStart = strpos($restData, $endTag);
$len = strlen($endTag);
$posEnd = $posStart + $len;

if($stripContent==1){
$newData .= substr($restData, 0, $posStart);
}
$restData = substr($restData, $posEnd);

}else{
$newData .= $restData;
break;
}
}
return $newData;
}
?>


結果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
aaa
<strong>strong</strong>
bbb
<em>em</em>
ccc


ccc

ddd
</body>
</html>

網站多國語言架構之比較

2012年9月25日 星期二

BIOS, ACPI 2.0



ACPI 2.0 Support

「Please note that for Microsoft Windows to run in ACPI mode, it needs to be installed with ACPI enabled in the BIOS. If you switch from ACPI to non-ACPI mode, or vice versa, Microsoft Windows will fail to boot. You need to reinstall Microsoft Windows everytime you switch modes.



ACPI 2.0 support: Enable or Disable?

2012年9月11日 星期二

微軟授權:隨機版, 盒裝版,大量授權,MSDN



隨機版

跟著電腦主機同生死。電腦故障報廢之後,隨機版軟體必須一起報廢,不能再使用。尤其以主機板為電腦主機裡面的靈魂,換了主機板就等於換了一台電腦。不過微軟還是有稍微通融,因為我曾經把 A 電腦的隨機版 XP 拿到 B 電腦裝,還是可以通過啟動驗證。聽說有次數限制。



弗達軟體商品區-Office授權說明

Q:一套Office 可以裝在幾台電腦上?



A:一般來說,隨機版跟大量授權一套軟體只可以裝在一台電腦上。

但盒裝版用戶得於授權裝置之唯一主要使用者所使用的可攜式裝置上,安裝另一份軟體拷貝。

(這裡沒有說是2010,2007或2003, 所以只要是盒裝版都可以裝PC+NB?)





盒裝版

可以移轉。



大量授權

簡單講就是一個序號可以裝很多台。



MSDN

MSDN 版的 Windows 提供測試用。它跟 隨機版、盒裝版、大量授權版不算是相異的概念,它不是這三種之外的第四種,而是包含各種版本的授權模式。



像我們公司有訂 MSDN OS,一期兩年,第一期聽說 3萬多元,之後續訂是 2萬4千元。微軟經銷商會寄來"大量授權"的紙本文件 (Microsoft Open License Agreement),上面包含各種 Windows 的序號,Windows XP, Windows Vista, Windows 7, Windows 2003, Windows 2008... 。每種作業系統都只有一個序號,客服人員說每個序號約可以啟動 10 台電腦。另外,MSDN 網站上面有更多序號,不過這裡查到的序號都是零售版。這裡也有各式安裝光碟的映象檔,包含大量授權版本。我印象中曾經拿 MSDN 下載的零售版來安裝,然後輸入公司盒裝版的正版序號,可以通過驗證。微軟網站也有說明,MSDN 光碟跟一般正式版本沒有差別。不會少了什麼功能。



授權摘要:

◎一套只授權給單一的個人使用,而不是一個團隊。但是這個人可以安裝任意數目的電腦。

◎啟用數量仍有限制,一個序號大約是10台電腦,反正只要裝起來可以通過驗證,你裝幾台都是合法,因為這是授權給個人。不過如果裝太多台真的會提示"啟動次數超過"。

◎除了一開始大量授權的序號,也可以去 MSDN 網站查詢一般零售版(盒裝版?隨機版?)的序號來用。

◎MSDN 是用來做測試、開發、設計、展示用途。以任何其它方式使用,不涵蓋在授權範圍內。 (例如工程師用來收發信、打報告、編輯文件就不屬於 MSDN 授權範圍。)



微軟官方說明:

MSDN 訂閱軟體使用權利

大量授權管理




其它網路文章:

Windows XP 各版本的区别

如何看懂 Microsoft Open License Agreement 授權協議書 (看了還是不懂……)

Microsoft 大量授權介紹:企業最佳的授權選擇策略



[發問]vista非還原光碟重灌oem序號問題

「線上啟用卻出現軟體授權服務報告指出產品金鑰無效」

我有正版的win7序號,可以去下載一片win7光碟來安裝嗎?

「電腦上貼的序號是微軟給廠商出貨用的序號,不適用市場所上販售的」








2012年7月17日 星期二

PHP, .NET, Java ??



最近心血來潮,想看看目前各家程式語言的趨勢如何,看到這篇文章:PHP和ASP.NET学哪个好?哪个是未来的趋势?  。這是2009年的討論串,有個樓主把 .net 捧上天,並附上他更早之前寫的幾篇連結,說的我好想放棄 php 直接跳槽去學 .net 。不過話說回來,之前某篇文章對 php 的評語下的很好,大意是:「php就像膠水一樣,可以很方便的把各種功能黏合在一起。」



用自己身邊實際上的例子:要發電子報的話,在 google 上面打 php+電子報,馬上就找到 PHPList 這個完全免費的發報系統。如果會用 CiviCRM 裡面的 CiviMail 的話,可以發現它功能也很齊全,不論是排程發送還是點閱追蹤。但是如果在 google 上面打 .net+電子報,真的找不到可以拿來套用的。需要論壇的話,php 隨便找也一堆,Discuz, phpBB。CMS 系統的話,Joomla, Drupal, Xoops...等等。需要什麼東西,只要把套件裝好,版面圖案改一改,立即可用! .net 所謂的開發速度快,應該是對經營網站承包的軟體公司而言。但是對很多中小企業來說,最想要的應該是盡量壓低價格。比如說,之前耳聞某公司請人家評估網站改版,隨隨便便就要七、八十萬,甚至還有人開到一百七十二萬,看到報價單差點昏倒。那公司不如請內部人員兼著寫,用 php 把舊程式改一改寫一寫,薪水加個三千好了,一年才多3萬6,多划算。當然也許細致度有差,但是主要的功能都有出來,其實夠用就好。



PHP 的好處就是,簡單的功能易學易上手,難一點的東西有免費的套件幫你搞定,安裝起來只需要解解 bug 。所以 PHP 還是有市場的!!可以接很多外包的小案子。



不過競爭激烈,明年開始學 .net 好了。


2012年7月13日 星期五

程式碼上色範例 SyntaxHighlighter



要顯示的程式碼效果:



<script type="text/javascript">
function getValue()
{
var i=0;
i=i+1;
alert(i);
}
test
test
test
</script>
=======================================================

方法:













//下面這段是要顯示的內容
<script type="text/javascript">
function getValue()
{
var i=0;
i=i+1;
alert(i);
}
test
test
test
</script>
//顯示的內容結束


參考文章:

讓文章的程式碼顯示行號





2012年7月9日 星期一

PHP, preg_replace_callback



範例一







============================================================



範例二





其它參考:

preg_replace_callback()调用类中的回调函数


2012年6月27日 星期三

十大謊言

十大謊言

 1.同學:我沒唸啊,不知道為何考這麼高。  

 2.來賓:大家好,我只簡單講兩句。

 3.老闆:我不會忘記你的貢獻。

 4.職員:明天我就不幹了。

 5.商人:虧本大拍賣,只到今天。

 6.明星:我們只是朋友。

 7.政客:我決定退出政壇!

 8.女孩:這是我的第一次。

 9.父母:我幫你把紅包存起來了。

 10.歐巴桑:帥哥~~~~~~~



來源?不知道,太多來源了。