loading
Please wait while loading...

查看詳情 用 PHP 的 filter_var 驗証Email

以往我們驗証 email 是否正確, 通常都是用 preg_match, 可是今天卻無意中發現, 原來 php5 早已內置 email validation 的功能, 那就是 filter_var

filter_var($email, FILTER_VALIDATE_EMAIL)

可是, 可能大家平日沒有留意, 其實一般通用的 email 驗証都沒有處理好 domain 的, 例如 xxx@xxx.com1, 即使用 filter_var 也是可以順利通過的, 但事實上那樣的域名是並不存在的, 所以在驗証時最好還要加多一些限制, 我的方法如下

function verifyEmail($email) {
	if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
		return preg_match('/^([a-z]{2,4})$/', end(explode('.',$email)));
	}
	return false;
}

注意: 雖然我在驗証中只允許域名最後兩字是 2-4 個字母, 但其實現在是存在一些特別的域名是超過4個字母的, 例如 .travel, .museum, 所以使用上要視符網站需求去設定

filter_var 還有很多其他驗証功能, 例如 FILTER_VALIDATE_URL, FILTER_VALIDATE_IP 等, 有需要時可到 php.net 詳閱

查看詳情 用 varchar join table - Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMP

在 MySQL 我們要 join 兩個資料表時必須用一個 field 去做連結, 而一般來說這個 field 都是數字型態, 因此很少會出現問題。

可是今天我卻出現一個情況是需要用到一個 varchar 型態的 field 去做連結的, 照正式的方式寫後, 結果出現以下的錯誤訊息: "Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation", 原來在 MySQL 是不可以用 varchar 直接做這樣的比對的, 在 google 搜尋一翻後終於找到如下答案:

SELECT a.* FROM a INNER JOIN b ON CAST(a.field AS CHAR) = CAST(b.field AS CHAR)

查看詳情 檢查瀏覽器是否支援HTML5 drag and drop 拖放功能

if('draggable' in document.createElement('span')) {
  alert("Drag support detected");
}

查看詳情 JS 新增的 input 沒有隨表單提交

我們編寫網頁表單時,有時會需要設計一些動態數目的輸入項,在這些情況中,我們通常會使用 jQuery/js 來動態增加輸入框到表單中。可是,今天我卻遇到一個問題,就是用 JS 加入的輸入框的值並沒有送到伺服器端,起初我以為是 JS 的設定錯了,但最終找到原因原來是和 html 的結構有關

以下是 html

<table id="table">
	<form>
	<thead>
		<tr>
			<th>Title</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td><input type="text" name="dynamic[]"></td>
		</tr>
	<tbody>
	<tfoot>
		<tr>
			<td><input type="button" id="addmore"></td>
		</tr>
	</tfoot>
	</form>
</table>

JS:

$(document).ready(function() {
	$("#addmore").click(function() { $("tbody",$("#table")).append(''); });
});

令新加的輸入框無法傳送出去的原因是 table 和 form 的次序, 上例中我是把 form 放在 table 的入面, 這樣的情況便會導致提交時表單無法取得新加的輸入框的值, 因為從正確 html 層面上來說, table 中間的內容應該是寫在 td 或 th 中的, 而上例則不規則地在 table 和 td 中間插入 form, 所以便出了錯誤, 解決方法很簡單, 只需將 form 和 table 的次序調轉, 用 form 包住 table 便可以了:

Title

查看詳情 讓 IE 用戶下載 docx, xlsx

Office 自 07 或以後版本提供了新的副檔名, 就是在原有副檔名加上了一個「x」, 例如 doc 變成了 docx, 如果你需要在伺服器提供 docx, xlsx, pptx 等檔案的下載, 在 firefox 或 chrome 等瀏覽器是沒有問題的, 可是如果用 IE 下載, 便會發現檔案變成了一個 zip 檔, 無法正確下載文件, 這是因為 IE 並不認得這種「新型」的檔案, 要解決這個問題, 便需要在 server 端寫一些額外的語法了

header('Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment; filename="'.$filename.'"');
readfile($path);
1 2 3 4 5 6 7 8 9 10