nhconch [ผลงานต้นฉบับ]
เพื่อน ๆ ที่เคยใช้ PHP รู้ดีว่าการใช้ตัวแปรใน PHP นั้นยืดหยุ่นและสะดวกสบาย โดยเฉพาะการแปลงค่าชื่อตัวแปรในสตริงสามารถเข้าใจได้ง่าย ทำให้โค้ด PHP ทั้งหมดกระชับและสวยงามยิ่งขึ้น ตัวอย่างเช่น จำเป็นต้องเขียนคำสั่ง SQL เพื่ออัพเดตฐานข้อมูลเท่านั้น: "update users setpass='$password', group=$group, name='$username' โดยที่ account='$account'", โดยที่ $password , $group, $username และ $account จะถูกแทนที่ด้วยค่าตัวแปรตามจริง เพื่อให้บรรลุฟังก์ชันเดียวกันใน ASP คุณต้องเขียน: "update users setpass='" &password & "',group=" & group & ",name= '" & ชื่อผู้ใช้ & "' โดยที่ account='" & account & "'" ซึ่งดูละเอียดและน่าเกลียด หากเป็นภาษาแทรกและมีฟิลด์ที่แทรกจำนวนมาก การตรวจสอบความสอดคล้องระหว่างฟิลด์และค่าต่างๆ จะเป็นกระบวนการที่ยุ่งยาก
ตอนนี้เรามาดูวิธีการใช้การแปลงชื่อ-ค่าตัวแปรที่คล้ายกันใน ASP
แนวคิด
ก็คือก่อนอื่นจะต้องมีวิธีแยกแยะชื่อตัวแปรที่ต้องถูกแทนที่ด้วยค่าจริงจากข้อความธรรมดา จากนั้นแทนที่ชื่อตัวแปรที่พบทั้งหมดด้วยค่าจริงที่เป็นตัวแทน
จุดแรกสามารถพบได้ผ่านนิพจน์ทั่วไป ในที่นี้เราไม่ได้ใช้การแสดงตัวแปรของ PHP แต่ใช้ตัวเลขขนาดใหญ่ {} เป็นอักขระขอบเขตของชื่อตัวแปร กลุ่ม}.
จุดที่สองคือกุญแจสำคัญในการแปลงค่าชื่อตัวแปร เมื่อดูข้อมูล ASP เราไม่พบวิธีการนำไปใช้งานโดยตรง แต่มีฟังก์ชัน Execute ที่ดึงดูดความสนใจของเรา จากคำอธิบายข้อมูล เรารู้ว่า Execute สามารถดำเนินการสตริงที่ถูกต้องที่เข้ามาเป็นการซิงโครไนซ์การเรียกใช้โค้ดในลักษณะนี้ เราจำเป็นต้องเขียนฟังก์ชันเล็กๆ เท่านั้นเพื่อให้บรรลุเป้าหมายของเรา รหัสหลักคือ:
ฟังก์ชั่น GetVar (var_name)
ดำเนินการ("ฟังก์ชั่น get_value(): get_value=" & var_name & `: สิ้นสุดฟังก์ชั่น")
getvar=get_value()
การใช้
งานฟังก์ชันสิ้นสุด
:
ฟังก์ชั่น GetVar (var_name)
ดำเนินการ("ฟังก์ชั่น get_value(): get_value=" & var_name & `: สิ้นสุดฟังก์ชั่น")
getvar=get_value()
ฟังก์ชันสิ้นสุด
ฟังก์ชัน Txt2Value(str, ระดับ)
regEx สลัว, การแข่งขัน, ผลลัพธ์
ตั้งค่า regEx = RegExp ใหม่
เลือกระดับกรณี
case 0 regEx.Pattern = "{(w+)}" 'ชื่อตัวแปรถูกต้อง
กรณีที่ 1 regEx.Pattern = "{([w+-*/\<>=]+)}" 'ชื่อตัวแปรและตัวดำเนินการถูกต้อง
'case 2 regEx.Pattern = "{([ws]+)}" 'อักขระทั้งหมดยกเว้นอักขระขึ้นบรรทัดใหม่ถูกต้อง
กรณีอื่นออกจากฟังก์ชัน
สิ้นสุดการเลือก
'regEx.Pattern = "{(w+)}"
regEx.IgnoreCase = จริง
regEx.Global = จริง
ตั้งค่าการจับคู่ = regEx.Execute(str)
ผลลัพธ์ = STR
'response.write ตรงกันนับ
สำหรับการแข่งขันแต่ละครั้งในการแข่งขัน
ผลลัพธ์ = แทนที่ (ผลลัพธ์, Match.Value, GetVar (Match.SubMatches(0)))
ต่อไป
ตั้งค่าการจับคู่ = ไม่มีเลย
ตั้งค่า regEx = ไม่มีเลย
Txt2Value = ผลลัพธ์
ฟังก์ชันสิ้นสุด
ฟังก์ชัน Var2Value(var_name)
Var2Value = Txt2Value(var_name, 0)
ใช้ฟังก์ชันสิ้นสุด
:
Var2Value("อัปเดตผู้ใช้ตั้งรหัสผ่าน='{รหัสผ่าน}', กลุ่ม={กลุ่ม}, ชื่อ='{ชื่อผู้ใช้}' โดยที่บัญชี='{บัญชี}'"
Var2Value เรียก Txt2Value ค้นหาชื่อตัวแปรทั้งหมดแล้วเรียก GetVar เพื่อรับค่าตัวแปรและแทนที่ ในความเป็นจริง การเรียก Txt2Value(str,1) โดยตรงยังอนุญาตให้มีการดำเนินการทางคณิตศาสตร์สี่ค่ากับค่าสตริงด้วย