2009年5月27日 星期三

不設暫存就交換兩個變數的方法

實在太強了,從來沒想過交換兩個變數的內容,不設定額外的暫存變數就能達成!請看:

原理如下

a = a + b ;
b = a - b ;
a = a - b ;

計算符合正規表達式的字串有多少,是哪些?

JavaScript equivalent to preg_match

var txt = 'asd asd lfhaf';
txt += ' fklakdfh sfsj';
var matches = txt.match(/<[^<]+>/g);
for (i in matches) {
  alert(i + ' : ' + matches[i]);
}

[jquery] div元素置頂語法

What is the simplest jQuery way to have a 'position:fixed' (always at top) div?

<div id="myElement" style="position: absolute">
This stays at the top
</div


$(window).scroll(function() {
$
('#myElement').css('top', $(this).scrollTop() + "px");
});


2009年5月25日 星期一

[VB]字串處理函數

[VB]字串處理函數

LEN字串長度函數:計算字串的長度。

函數運算式

結果

len("abcd")

4

len("中文字")

3

len(abc中文)

5

執行範例:


MID取部份字串函數:依開始位置擷取固定長度字串。

函數運算式

結果

mid("vbscript",3,3)

scr

mid("vbscript",3)

script

mid("vbscript",1,2)

vb

執行範例:

LEFT字串開頭取部份字串函數:將某一字串由開頭擷取固定長度。

函數運算式

結果

left("vbscript",2)

vb

left("vbscript",5)

vbscr

執行範例:

RIGHT字串結尾取部份字串函數:將某一字串由結尾擷取固定長度。

函數運算式

結果

right("vbscript",2)

pt

right("vbscript",6)

script

執行範例:

LCASE轉大寫函數:將字串中的大寫字母變成小寫。

函數運算式

結果

lcase("VBScript")

vbscript

lcase("VBScript程式")

vbscript程式

執行範例:

UCASE轉小寫函數:將字串中的小寫字母變成大寫。

函數運算式

結果

ucase("VBScript")

VBSCRIPT

ucase("VBScript程式")

VBSCRIPT程式

執行範例:

TRIM刪除頭及尾空白字元函數:將字串開頭及結尾的空白字元刪除。
LTRIM
刪除開頭空白函數:將字串開頭的空白字元刪除。
RTRIM
刪除結尾空白函數:將字串結尾的空白字元刪除。

函數運算式

結果

trim(" VBScript ")

VBScript

ltrim(" VBScript ")

VBScript

rtrim(" VBScript ")

VBScript

執行範例:

REPLACE替代字串函數:將字串中的某字串用另一字串代替。

函數運算式

結果

replace("VBScript","VB","JAVA")

JAVAScript

執行範例:

INSTR是否包含另一字串函數:傳回子字串在字串中的第一次出現位置。

函數運算式

結果

instr("ABCabc","a")

4

instr("ABCabc","BC")

2

執行範例:

SPACE空白字元函數:產生N個空白字元。

函數運算式

結果

space(10)

 

執行範例:

STRING產生字串函數:產生N個字元。

函數運算式

結果

string(5,"*")

*****

string(3,65)

AAA

執行範例:

STRREVERSE反轉字串函數:將字串內容前後反轉。

函數運算式

結果

strreverse("VBScript")

tpircSBV

strreverse("中文字")

字文中

執行範例:

SPLIT分割字串函數:將長字串依某字元分割並放於陣列中。

函數運算式

結果

arr=split("張三&李四&王五","&")


LEN字串長度函數:計算字串的長度。

函數運算式

結果

len("abcd")

4

len("中文字")

3

len(abc中文)

5

執行範例:


MID取部份字串函數:依開始位置擷取固定長度字串。

函數運算式

結果

mid("vbscript",3,3)

scr

mid("vbscript",3)

script

mid("vbscript",1,2)

vb

執行範例:

LEFT字串開頭取部份字串函數:將某一字串由開頭擷取固定長度。

函數運算式

結果

left("vbscript",2)

vb

left("vbscript",5)

vbscr

執行範例:

RIGHT字串結尾取部份字串函數:將某一字串由結尾擷取固定長度。

函數運算式

結果

right("vbscript",2)

pt

right("vbscript",6)

script

執行範例:

LCASE轉大寫函數:將字串中的大寫字母變成小寫。

函數運算式

結果

lcase("VBScript")

vbscript

lcase("VBScript程式")

vbscript程式

執行範例:

UCASE轉小寫函數:將字串中的小寫字母變成大寫。

函數運算式

結果

ucase("VBScript")

VBSCRIPT

ucase("VBScript程式")

VBSCRIPT程式

執行範例:

TRIM刪除頭及尾空白字元函數:將字串開頭及結尾的空白字元刪除。
LTRIM
刪除開頭空白函數:將字串開頭的空白字元刪除。
RTRIM
刪除結尾空白函數:將字串結尾的空白字元刪除。

函數運算式

結果

trim(" VBScript ")

VBScript

ltrim(" VBScript ")

VBScript

rtrim(" VBScript ")

VBScript

執行範例:

REPLACE替代字串函數:將字串中的某字串用另一字串代替。

函數運算式

結果

replace("VBScript","VB","JAVA")

JAVAScript

執行範例:

INSTR是否包含另一字串函數:傳回子字串在字串中的第一次出現位置。

函數運算式

結果

instr("ABCabc","a")

4

instr("ABCabc","BC")

2

執行範例:

SPACE空白字元函數:產生N個空白字元。

函數運算式

結果

space(10)

 

執行範例:

STRING產生字串函數:產生N個字元。

函數運算式

結果

string(5,"*")

*****

string(3,65)

AAA

執行範例:

STRREVERSE反轉字串函數:將字串內容前後反轉。

函數運算式

結果

strreverse("VBScript")

tpircSBV

strreverse("中文字")

字文中

執行範例:

SPLIT分割字串函數:將長字串依某字元分割並放於陣列中。

函數運算式

結果

arr=split("張三&李四&王五","&")


How To:對 Active Directory 使用表單驗證

利用 Active Directory 來驗證帳號

想利用 Active Directory 來驗證帳號是否正確? 於是上網找相關資料,資料很多,但對於『如何設定路徑來連接到 AD'部份沒有說清楚,讓我花費很多時間,程式完成後,你會發現真簡單。

準備工作:
1. 本段摘錄至〔使用 System.DirectoryServices 搜尋 Active Directory〕一文,若要連接 Active Directory,您可以使用 Global Catalog (GC://) 語法指定路徑,或使用標準 LDAP 路徑 (LDAP://)。使用的語法和路徑視網路環境而定。例如,在使用內部網路時,我決定使用 Global Catalog 語法,因為它可讓我搜尋整個企業網路 (整個 Active Directory 樹系)。我不包括伺服器名稱的路徑,而只指定 "GC://dc=home,   dc=duncanmackenzie,dc=net" (假設我的網域叫作 home.duncanmackenzie.net),它讓 ADSI 連接到指定網域的通用類別伺服器。

2. 利用連到 AD的路徑、使用者名稱(或「網域\使用者名稱」的格式)與密碼來建立 DirectoryEntry物件,其中 連到 AD路徑的語法為: LDAP://你的網域名稱 或 LDAP://AD的SERVER名稱,及其他格式。

   使用『WinNT://』執行 DirectorySearcher中 FindOne指令會出現「提供者不支援搜尋,並且無法搜尋 WinNT://xxx.xxx.xxx」訊息,網路上有人說『只有〔LDAP://〕支援搜尋功能,而〔WinNT://〕不支援搜尋功能』。

3. 透過 DirectoryEntry物件連接到 Active Directory,再透過 DirectorySearcher物件找到指定的帳號。


Active Directory 的 SERVER名稱或電腦名稱為 A1.B2.C3.D4.E5

範例程式:

<%@ Page Language="VB" %>
<%@ Import  Namespace="System.DirectoryServices" %>

<script runat="server">

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim user_name As String
        Dim ent As DirectoryEntry

        ent = New DirectoryEntry("LDAP://A1.B2.C3.D4.E5", TX_User.Text, TX_Passwd.Text)

        Dim dirsearcher As DirectorySearcher
        dirsearcher = New DirectorySearcher(ent)
        dirsearcher.Filter = "(sAMAccountName=" + TX_User.Text + ")"

        dirsearcher.PropertiesToLoad.Add("displayName")

        dirsearcher.SearchScope = SearchScope.Subtree

        Try
            Dim results As SearchResult = dirsearcher.FindOne
            '傳回值之中 Path = "LDAP://A1.B2.C3.D4.E5/CN=王小明,CN=Users,DC=B2,DC=C3,DC=D4,DC=E5"
            '其中第一個CN為 AD上看到的名稱,不是〔顯示名稱〕這欄位值

            If IsNothing(results) Then
                Message_label.Text = "找不到 " + TX_User.Text + " 帳號 或 密碼錯誤。"
                Return
            Else
                '通過 AD驗證,將 AD中〔顯示名稱〕這欄設定給 user_name
                user_name = results.GetDirectoryEntry().Properties("displayName").Value
            End If
        Catch ex As Exception
            Message_label.Text = "錯誤訊息:" + ex.Message
            Return
        End Try

        Message_label.Text = user_name + ",登入成功"
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>AD 帳號驗證</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       使用者名稱:<asp:TextBox ID="TX_User" runat="server"></asp:TextBox><br /><br />
       密碼:<asp:TextBox ID="TX_Passwd" runat="server" Style="position: static" TextMode="Password"></asp:TextBox><br /><br />
      
       <asp:Button ID="Button1" runat="server" Style="position: static" Text="登入" OnClick="Button1_Click" /><br /><br />
      
       <asp:Label ID="Message_label" runat="server" Style="position: static" Text=""></asp:Label>
    </div>
    </form>
</body>
</html>

 參考資料:
01. DirectoryEntry.Path 屬性:依提供者有所不同,列出一些常見的案例。

02. 使用 System.DirectoryServices 搜尋 Active Directory

03. Active Directory:簡介 AD。

04. Windows Server Protocols (WSPP):可找到 AD所有欄位說明文件。

05. 在Win 2000 AD環境中,以批次的方式進行使用者帳號的建立與管理:利用「LDP tool」程式可以知道 AD中每一個屬性的欄位名稱。

06. Ldp Overview:這一個工具的功能就是利用LDAP的協定去查詢LDAP Server。

07. 如何使用 ADO 至 Access 透過 ADSI LDAP 提供者物件:透過 ADO 來存取 LDAP 相容目錄中的物件

08. 目錄服務範例:.NET存取及管理 Active Directory 的範例。

09. AD上帳號的讀取、建立及權限設定

10. 利用DirectoryEntry組件來查看網路 (大陸網站)

11. Querying Microsoft Active Directory Using Microsoft .NET Framework Library

12. Howto: (Almost) Everything In Active Directory via C#

13. Active Directory and LDAP - ASP.NET Forums

14. The LDAP Application Program Interface:RFC 1823。

15. How Do LDAP Attributes Map to Address Book Fields:LDAP attribute mappings to Outlook Address Book

16. The Mozilla LDAP C SDK:包含一組 LDAP 應用程式介面 (API),可建立啟用 LDAP 的用戶端。 下載位址

17. 常見的 LDAP RFC