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光碟來安裝嗎?

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