String methods
ในบทก่อนหน้า คุณได้เรียนรู้กับ String ในเบื้องต้นไปแล้ว อย่างไรก็ตาม ในภาษา Ruby นั้นมีเมธอดเกี่ยวกับ String เป็นจำนวนมากที่สามารถช่วยอำนวยความสะดวกให้กับเราในการเขียนโปรแกรมเพื่อจัดการ String ในบทนี้ เราจะพูดเกี่ยวกับการใช้งานเมธอดที่สำคัญและใช้บ่อยของคลาส String
เมธอดพื้นฐานของ String
ในการใช้งาน String สิ่งหนึ่งที่เราอยากจะทราบเกี่ยวกับ String คือต้องการทราบว่ามันมีความยาวเท่าไหร่ คุณสามารถใช้เมธอด length
เพื่อหาความยาวของ String ได้
name = "Mateo"
occupation = "Ruby programmer"
puts name.length # => 5
puts occupation.length # => 15
เราใช้เมธอด length
ในการหาความยาวของ String ความยาวของ String คือจำนวนตัวอักษรทั้งหมดใน String ในตัวอย่าง ตัวแปร name
มีความยาว 5 ตัวอักษร และตัวแปร occupation
มีความยาว 15 ตัวอักษร
ตัวอย่างต่อไป เราจะเขียนโปรแกรมเพื่อให้ผู้ใช้กำหนดรหัสผ่านของพวกเขา โดยมีเงื่อนไขอยู่ว่ารหัสผ่านต้องมีความยาวระหว่าง 4 ถึง 32 ตัวอักษร นี่เป็นโค้ดของโปรแกรม
puts "Set password for your account"
print "Enter password: "
password = gets.chomp
if password.length < 4
puts "Your password is too short"
puts "It should be at least 4 characters"
elsif password.length > 32
puts "Your password is too long"
puts "It should not more than 32 characters"
else
puts "Congrats! Your password has been set"
end
ในตัวอย่าง เป็นโปรแกรมสำหรับกำหนดรหัสผ่านโดยการรหัสผ่านรับค่ามาจากคีย์บอร์ด ในการตั้งรหัสผ่านมีเงื่อนไขอยู่ว่ารหัสผ่านต้องมีความยาวอยู่ระหว่าง 4 - 32 ตัวอักษรเท่านั้น ถ้าหากไม่ใช่โปรแกรมจะแจ้งว่าให้เลือกลองใหม่อีกครั้ง
if password.length < 4
puts "Your password is too short"
puts "It should be at least 4 characters"
เราใช้คำสั่งตรวจสอบเงื่อนไข if
เพื่อตรวจสอบว่าความยาวของรหัสผ่านนั้นน้อยกว่า 4 หรือไม่
Set password for your account
Enter password: ab
Your password is too short
It should be at least 4 characters
นี่เป็นผลลัพธ์การทำงานของโปรแกรม เราพิมพ์รหัสผ่านเป็น ab
เนื่องจากความยาวของรหัสผ่านนั้นน้อยเกินไป ดังนั้นโปรแกรมบอกให้คุณลองกำหนดรหัสผ่านใหม่อีกครั้ง
Set password for your account
Enter password: thisispassword
Congrats! Your password has been set
หลังจากนั้นเรารันโปรแกรมอีกครั้งและพิมพ์รหัสผ่านเป็น thisispassword
ในครั้งนี้รหัสผ่านของเรามีความยาวตามที่กำหนด และเราได้รับข้อความว่า ยินดีด้วย! ตั้งรหัสผ่านของคุณแล้ว คุณอาจจะลองตั้งรหัสผ่านที่มากกว่า 32 ตัวอักษร และเราเดาว่าคุณน่าจะรู้ว่าผลลัพธ์จะเป็นอย่างไร
เมธอด Slice และ Index
อย่างที่เราได้บอกไปแล้วในบทก่อนหน้า String นั้นเป็นข้อความที่ประกอบขึ้นด้วยลำดับของตัวอักษร ซึ่งในเบื้องหลังนั้น Ruby เก็บข้อมูลของ String เป็นอาเรย์ของตัวอักษร นั่นจึงทำให้เราสามารถเข้าถึงค่าของ String ผ่านทาง Index ของมันได้ วิธีการดังกล่าวนี้เรียกว่าการ Slice
ในภาษา Ruby อนุญาติให้คุณทำเช่นนี้ได้ผ่านทางเมธอด []
และ เมธอด slice
นี่เป็นรูปแบบการใช้งาน
str[start, [count =1]]
str.slice(start, [count = 1])
จากรูปแบบการใช้งาน start
เป็น Index ที่เราต้องการตัด String และ count
เป็นการบอกว่าต้องการตัด String ไปเป็นจำนวนกี่ตัวจากตำแหน่งเริ่มต้น เราสามารถละเว้นอาร์กิวเมนต์ตัวที่สองได้ ค่าเริ่มต้นที่เป็น 1
จะถูกใช้แทนเมื่อเราละเว้นมัน ซึ่งหมายถึงการจัดหรือเข้าถึงตัวอักษรเพียงหนึ่งตัว
สำหรับการ slice String ในภาษา Ruby นั้นมีวิธีการทำอยู่สองแบบคือการใช้เมธอดเครื่องหมาย []
และผ่านเมธอด slice
ทั้งสองวิธีให้ผลลัพธ์ที่เหมือนกัน คุณสามารถเลือกใช้วิธีไหนก็ได้ แต่ในบทเรียนของเรามักจะใช้วิธีแรกเป็นหลัก
str = "Mountains"
puts str[0]
puts str[1] + str[2]
puts str[-1]
puts str[-2]
ในตัวอย่าง เป็นการใช้งานเมธอด []
เพื่อเข้าถึงตัวอักษรผ่านทาง Index ของ String โดยที่ Index ของ String นั้นจะเหมือนกับอาเรย์คือเริ่มต้นจาก 0
ซึ่งหมายถึงตัวอักษรตัวแรกใน String ถึง n - 1
เมื่อ n
เป็นความยาวของ String ซึ่งหมายถึงตัวอักษรตัวสุดท้ายใน String
puts str[-1]
puts str[-2]
คุณสามารถระบุ Index ที่เป็นลบได้ -1
หมายถึงตัวอักษรตัวสุดท้ายใน String และ -2
เป็นตัวอักษรรองสุดท้าย และถัดมาเรื่อยๆ ตามลำดับ
M
ou
s
n
นี่เป็นผลลัพธ์การทำงานของโปรแกรมจากการเข้าถึงตัวอักษรใน String ผ่านทางเมธอด []
หรือ slice
ตัวอย่างต่อมาเป็นการใช้เมธอด slice
โดยการกำหนดอาร์กิวเมนต์ตัวที่สองซึ่งบอกจำนวนที่เรต้องการตัด ในการทำเช่นนี้เราสามารถตัดส่วนของ String ที่มากกว่าหนึ่งตัวอักษรได้
str = "Mountains"
puts str[0,1]
puts str[0,3]
puts str[4,5]
str2 = "Learn Ruby language"
puts str2[6,4]
puts str2[-8,8]
ในตัวอย่าง เป็นการตัดเอา String แบบกำหนดจำนวนที่ต้องการ และเช่นเดิมในอาร์กิวเมนต์แรกเป็นการกำหนด Index เริ่มต้นสำหรับการslice และในอาร์กิวเมนต์ที่สองกำหนดจำนวนตัวอักษรที่จะตัดเอาโดยเริ่มจาก Index เริ่มต้น
Mo
tains
Ruby
language
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
จากตัวอย่างทั้งหมดนั้น คุณสามารถทำการ slice ในรูปแบบของเมธอด slice
ได้ มันให้ผลลัพธ์ที่เหมือนกัน
str = "Mountains"
puts str.slice(0, 1)
puts str.slice(0, 3)
puts str.slice(4, 5)
str2 = "Learn Ruby language"
puts str2.slice(6, 4)
puts str2.slice(-8, 8)
เมธอดแปลงตัวอักษรใน String
String มีกลุ่มของเมธอดที่ช่วยแปลงตัวอักษรแบบทั้งคำหรือประโยค ยกตัวอย่างเช่น แปลงข้อความจากตัวพิมพ์เล็กให้ตัวเป็นตัวพิมพ์ใหญ่ นี่เป็นตัวอย่างการใช้งานเมธอดดังกล่าว
puts "marcuscode".capitalize
puts "marcuscode".upcase
puts "HELLO".downcase
puts "marcuscode".reverse
ในตัวอย่าง เป็นการใช้งานของสี่เมธอดสำหรับแปลงตัวอักษรใน String เมธอด capitalize
จะแปลงตัวอักษรตัวแรกใน String ให้เป็นตัวพิมพ์ใหญ่ ในขณะที่เมธอด upcase
จะแปลงตัวอักษรทั้งหมดใน String ให้เป็นตัวพิมพ์ใหญ่
เมธอด downcase
นั้นทำตรงกันข้ามกับเมธอด upcase
คือแปลงตัวอักษรใน String ให้เป็นตัวพิมพ์เล็ก และสุดท้ายเมธอด reverse
จะกลับด้านของ String
Marcuscode
MARCUSCODE
hello
edocsucram
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
เมธอดจัดเตรียมค่าของ String
เมื่อเราเขียนโปรแกรม เรามักจะต้องมีการติดต่อกับผู้ใช้งานโปรแกรมผ่านทางคีย์บอร์ด เช่น การรับค่าจากผู้ใช้งานจากคีย์บอร์ดอยู่เสมอ ในกรณีนี้เราอาจจะต้องตรวจสอบให้แน่ใจว่าค่าที่รับมานั้นถูกต้องและเป็นไปตามที่ต้องการ นั่นเป็นเหตุผลที่เราควรจัดเตรียมค่าที่รับเข้ามาก่อน ในภาษา Ruby มีเมธอดสำหรับการจัดเตรียม String ก่อนนำไปใช้งาน
มาดูตัวอย่างโปรแกรมอย่างง่ายที่รับชื่อของผู้ใช้ผ่านทางคีย์บอร์ดผ่านเมธอด gets
ซึ่งเป็นวิธีที่เราคุ้นเคย
print "What's your name: "
name = gets
puts name.inspect
puts name.chomp.to_s.inspect
ในตัวอย่าง เป็นโปรแกรมรับค่าชื่อผ่านทางคีย์บอร์ดด้วยเมธอด gets
แล้วนำมาเก็บไว้ในตัวแปร name
และอย่างที่คุณรู้ เราจำเป็นต้องกดปุ่ม Enter
เพื่อสิ้นสุดการรับค่า ค่าที่เรารับมาจากคีย์บอร์ดนั้นจะมีตัวอักษร \n
ติดมาด้วยเสมอ นั้นเกิดขึ้นจากตอนที่เรากดปุ่ม Enter
puts name.inspect
puts name.chomp.to_s.inspect
ดังนั้นก่อนที่จะนำค่าที่รับมาไปใช้ในโปรแกรมได้อย่างถูกต้อง เราจำเป็นต้องลบค่า \n
ออกไปจาก String ก่อนโดยการเรียกใช้เมธอด chomp
ในตัวอย่างด้านบน เราแสดงเนื้อหาจริงๆ ของ String ผ่านทางเมธอด inspect
จะเห็นว่าค่าในตัวแปร name
ที่ยังไม่ได้เรียกใช้งานเมธอด chomp
จะมีตัวอักษร \n
ต่อท้ายข้อความ
What's your name: Mateo
"Mateo\n"
"Mateo"
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
และยังมีอีกเมธอดที่ใช้สำหรับจัดเตรียม String เมธอด strip
ใช้สำหรับตัดช่องว่างที่อยู่รอบทั้งสองด้านของ String ออกไป
puts " Thailand ".strip.inspect
puts " Japanese ".lstrip.inspect
puts " United State ".rstrip.inspect
ในตัวอย่างเป็นการใช้งานสามเมธอด สำหรับตัดช่องว่างจากขอบของ String ออกไป เมธอด strip
ใช้สำหรับตัดช่องว่างจากขอบของข้อความทั้งสองด้านออกไป เมธอด lstrip
ใช้ตัดช่องว่างที่อยู่ทางด้านซ้ายของข้อความ และเมธอด rstrip
ใช้ตัดช่องว่างที่อยู่ทางด้านขวาของข้อความ
"Thailand"
"Japanese "
" United State"
นี่เป็นผลลัพธ์การทำงานของโปรแกรม เราแสดงข้อความด้วยเมธอด inspect
เพื่อดูค่าจริงๆ ของ String ว่ามันเป็นอย่างไร
เมธอดเหล่านี้อาจมีประโยชน์เมื่อคุณต้องเขียนโปรแกรมเพื่อรับค่าจากผู้ใช้ผ่านทางคีย์บอร์ดหรือหน้าฟอร์มกรอกข้อมูล ซึ่งผู้ใช้งานของเราอาจจะพิมพ์เว้นวรรคเพิ่มเข้ามาแบบไม่ได้ตั้งใจ เราสามารถใช้เมธอดเหล่านี้เพื่อตัดมันออกไปได้
เมธอดสำหรับแก้ไขเนื้อหาของ String
เมธอดที่ใช้งานบ่อยที่สุดสำหรับการเพิ่มเนื้อหาให้กับ String คือเมธอด concate
และเมธอด prepend
ซึ่งการทำงานของเมธอดเหล่านี้ทำหน้าที่ในการนำค่าของ String มาเชื่อมต่อกันเพื่อให้ได้ String ใหม่ และอย่างที่คุณทราบ ตัวดำเนินการต่อ String +
นั้นเป็นการใช้งานรูปแบบสั้นของเมธอดทั้งสอง
puts "Hello ".concat("World")
puts "Hello".prepend("World ")
ในตัวอย่าง เป็นเป็นการนำข้อความมาต่อเข้าด้วยกันโดยเมธอดทั้งสอง แต่สิ่งที่แตกต่างกันคือ เมธอด concate
จะนำข้อความไปต่อที่ด้านท้ายของ String ในขณะที่เมธอด prepend
จะนำข้อความไปต่อที่ด้านหน้าของ String แทน
Hello World
Hello World
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
สำหรับการใช้งานเมธอด concate
หรือเมธอด prepend
นั้นเป็นการต่อ String ที่คุณได้เรียนรู้ไปแล้วในบทก่อนหน้าด้วยการใช้ตัวดำเนินการต่อ String +
ทั้งสองวิธีนั้นให้ผลลัพธ์ที่เหมือนกัน
puts "Hello " + "World"
ในขณะที่เราสามารถใช้เมธอด prepend
และเมธอด concate
เพื่อต่อข้อความเข้าไปยังตำแหน่งแรกและตำแหน่งสุดท้ายของ String เราสามารถใช้เมธอด insert
เพื่อแทรก String เข้าไปยังตำแหน่งใดๆ ได้ มาดูตัวอย่าง
puts "marcuscodecom".insert(0, ".")
puts "marcuscodecom".insert(3, ".")
puts "marcuscodecom".insert(10, ".")
puts "marcuscodecom".insert(-4, ".")
puts "marcuscodecom".insert(-1, ".")
ในตัวอย่าง เราได้แทรกตัวอักษร "."
เข้าไปยังที่ตำแหน่งต่างๆ ของ String ด้วยเมธอด insert
โดยกำหนดตำแหน่งที่เราต้องการแทรกผ่าน Index ซึ่งตัวอักษรจะถูกแทรกเข้าไปในตำแหน่ง Index ดังกล่าว
.marcuscodecom
mar.cuscodecom
marcuscode.com
marcuscode.com
marcuscodecom.
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
อาร์กิวเมนต์ที่สองของเมธอด insert
นั้นรับค่าเป็น String นั่นทำให้คุณสามารถแทรกทั้งข้อความเข้าไปยัง String ได้ ไม่จำเป็นต้องเพียงหนึ่งตัวอักษรเหมือนกับตัวอย่างก่อนหน้า
puts "<b></b>".insert(3, "Ruby")
puts "This is tutorial".insert(8, "Ruby ")
ในตัวอย่าง บรรทัดแรกเราได้แทรกข้อความ "Ruby"
ให้เข้าไปอยู่ในแท็กตัวหนาของ HTML และในบรรทัดต่อมาแทรกเข้าไปยังข้อความเพื่อสร้าง String ที่บอกว่า "นี่เป็นบทเรียนภาษา Ruby"
<b>Ruby</b>
This is Ruby tutorial
และนี่เป็นผลลัพธ์การทำงานของโปรแกรม
อีกเมธอดที่สำคัญและใช้งานบ่อยคือเมธอด sub
ในบางครั้งคุณอาจจะต้องการแทนที่ใน String จากคำหนึ่งไปเป็นคำหนึ่ง เพื่อทำเช่นนั้นคุณสามารถใช้เมธอด sub
ได้ นี่เป็นตัวอย่าง
str = "Ruby is an OPP language. Matz created Ruby in 1990.\n"
str += "Ruby was written in the C language.";
puts str.sub("Ruby", "Python")
เมธอด sub
ใช้เพื่อค้นหาและแทนที่คำใน String จากอีกคำหนึ่งไปยังคำหนึ่ง ในตัวอย่าง เป็นการใช้เมธอด sub
เพื่อแทนที่จากคำว่า "Ruby"
ที่พบใน String ด้วยคำว่า "Python"
Python is an OPP language. Matz created Python in 1990.
Python was written in the C language.
นี่เป็นผลลัพธ์ของโปรแกรม
เมธอดตรวจสอบค่าใน String
ต่อไปเราจะพูดถึงเมธอดสำหรับตรวจสอบค่าใน String ในภาษา Ruby มีเมธอดที่คุณสามารถใช้มันเพื่อตรวจสอบว่าใน String นั้นประกอบไปด้วยคำที่ต้องการหรือไม่ ซึ่งโดยทั่วไปแล้วเมธอดเหล่านี้จะให้ผลลัพธ์เป็นค่าของ Boolean
puts "marcuscode".start_with?("mar")
puts "marcuscode".start_with?("jar")
puts "Friday".end_with?("day")
puts "Jupiter".end_with?("day")
puts "Facebook".include?("oo")
puts "Twitter".include?("oo")
ในตัวอย่าง เราได้ใช้เมธอดสำหรับตรวจสอบคำใน String เมธอด start_with?
ใช้เพื่อตรวจสอบว่า String ขึ้นต้นด้วยคำที่ต้องการหรือไม่ เมธอด end_with?
ใช้เพื่อตรวจสอบว่า String นั้นลงท้ายด้วยคำที่ต้องการหรือไม่ และสุดท้ายเมธอด include?
ใช้เพื่อตรวจสอบว่าค่าอาร์กิวเมนต์เป็นส่วนหนึ่งของ String หรือไม่
true
false
true
false
true
false
นี่เป็นผลลัพธ์การทำงานของโปรแกรม ที่จะแสดงออกมาเป็นค่าของ Boolean โดยทั่วไปแล้วเรามักจะใช้เมธอดเหล่านี้กับคำสั่งตรวจสอบเงื่อนไข if
ต่อไปมาดูตัวอย่างโปรแกรมกรอกที่อยู่ของเว็บไซต์ และเราจะนำค่าที่รับเข้ามาตรวจสอบว่ามันเป็นไปตามที่ต้องการหรือไม่
print "Enter your website: "
url = gets.chomp
if url.start_with?("http")
puts "Nice! your website looks cool"
else
puts "Please enter a valid URL"
end
ในตัวอย่าง โปรแกรมถามให้ผู้ใช้กรอกเว็บไซต์ของพวกเขาผ่านทางคีย์บอร์ด โดยมีเงื่อนไขอยู่ว่าที่อยู่ของเว็บไซต์จะต้องขึ้นต้นด้วย "http"
เท่านั้น
if url.start_with?("http")
ดังนั้นเราจึงใช้เมธอด start_with?
เพื่อตรวจสอบว่าค่าในตัวแปร url
นั้นขึ้นต้นด้วย "http"
หรือไม่ ถ้าหากใช้โปรแกรมบอกว่าที่อยู่เว็บไซต์ของคุณนั้นถูกต้อง และถ้าหากไม่โปรแกรมบอกให้กรอกค่าที่ถูกต้องใหม่อีกครั้ง
Enter your website URL: http://marcuscode.com
Nice! your website looks cool
นี่เป็นผลลัพธ์การทำงานของโปรแกรม เมื่อเรากรอกที่อยู่ของเว็บไซต์เป็น http://marcuscode.com
ในตอนนี้ให้คุณลองกรอกที่อยู่ของเว็บไซต์ที่ไม่ถูกต้องและดูผลลัพธ์ว่าจะเป็นอย่างไร
ต่อมาเป็นตัวอย่างของเมธอดที่ใช้สำหรับเปรียบเทียบความเท่ากับของ String และตรวจสอบว่า String เป็นค่าว่างหรือไม่
puts "Ruby".eql?("Ruby")
puts "Ruby".eql?("PHP")
puts "Ruby" == "Ruby"
puts "Ruby" == "PHP"
puts "".empty?
puts "Mateo".empty?
ในตัวอย่าง เราได้ใช้เมธอด eql?
เพื่อเปรียบเทียบว่าค่าของ String ทั้งสองนั้นเท่ากันหรือไม่ ค่าที่เท่ากันหมายความว่า String ต้องมีความยาวและตัวอักษรที่เหมือนกัน สำหรับการทำงานของเมธอด eql?
จะให้ผลลัพธ์การทำงานเหมือนกับตัวดำเนินการเปรียบเทียบ ==
ที่คุณได้เรียนไปแล้วในบทของตัวดำเนินการ
เมธอด empty?
ใช้เพื่อตรวจสอบว่าค่าใน String นั้นเป็นค่าว่างหรือไม่ เมธอดนี้ไม่มีอาร์กิวเมนต์ ผลลัพธ์ของเมธอดนั้นเหมือนกับการที่เรานำความยาวของ String ไปเปรียบเทียบกับ 0
ด้วยคำสั่ง str.length == 0
true
false
true
false
true
false
นี่เป็นผลลัพธ์การทำงานของโปรแกรมสำหรับการใช้งานเมธอด eql?
และเมธอด empty?
ในการเปรียบเทียบและตรวจว่าค่าใน String ว่างหรือไม่
ตรวจสอบค่าใน String ด้วยเมธอด match?
อีกเมธอดหนึ่งที่เราอยากจะแนะให้คุณรู้จักคือเมธอด match?
มันใช้สำหรับตรวจสอบว่า String ตรงกับรูปแบบที่กำหนดหรือไม่ โดยรูปแบบนั้นจะถูกกำหนดด้วย Regular expression
Regular expression นั้นสามารถใช้เปรียบค่าใน String ตามตัวอักษรหรือรูปแบบที่ซ้อนได้ นี่เป็นตัวอย่าง
puts "mateo".match?(/mateo/) # => true
puts "mateo34".match?(/mateo34/) # => true
ในตัวอย่าง เราใช้เมธอด match?
เพื่อตรวจสอบว่า String นั้นตรงกับรูปแบบที่เราต้องการหรือไม่ ซึ่งรูปแบบที่กำหนดในอาร์กิวเมนต์นั้นจะเป็น Regular expression และมันจะล้อมรอบด้วยเครื่องหมาย Slash (/
) ในตัวอย่างนั้นเป็นการกำหนดรูปแบบเพื่อเปรียบเทียบตามตัวอักษร
นอกจานี้ เราสามารถใช้เมธอด match?
เพื่อเปรียบเทียบด้วยรูปแบบของ Regular expression ที่ซับซ้อนได้ ในตัวอย่างต่อไปเราจะสร้างรูปแบบเพื่อตรวจสอบว่าชื่อผู้ใช้นั้นถูกต้องหรือไม่
pattern = /^[a-z][a-z0-9]{4,9}$/
puts "metin".match?(pattern)
puts "mateo34".match?(pattern)
puts "mateo&34".match?(pattern)
puts "12luke".match?(pattern)
ในตัวอย่าง เราได้กำหนดรูปแบบในการตรวจสอบชื่อผู้ใช้ในตัวแปร pattern
โดยมีเงื่อนไขอยู่ว่าชื่อผู้ใช้สามารถมีได้เพียงตัวอักษรตัวพิมพ์เล็ก a - z
และตัวเลข 0 - 9
เท่านั้น และต้องมีความยาวอยู่ระหว่าง 4 - 10 ตัวอักษร และนอกจากนี้ยังมีเงื่อนไขพิเศษอยู่ว่าต้องขึ้นต้นด้วยตัวอักษรเท่านั้น จะขึ้นด้วยตัวเลขไม่ได้
true
true
false
false
และนี่เป็นผลลัพธ์การทำงานของโปรแกรม เราจะมาอธิบายผลลัพธ์ในแต่ละบรรทัดกัน
pattern = /^[a-z][a-z0-9]{3,9}$/
ในตอนแรก เราได้กำหนดรูปแบบที่เอาไว้ใช้สำหรับตรวจสอบชื่อผู้ใช้และกำหนดไว้ในตัวแปร pattern
และอย่างที่คุณเห็นว่ามันล้อมรอบด้วย /
ซึ่งนี่เป็น Regular expression literal
^[a-z]
จากรูปแบบข้างต้น เราต้องการให้ชื่อผู้ใช้ขึ้นต้นด้วยตัวอักษร ดังนั้นเราเริ่มต้นด้วยเครื่องหมาย ^
เพื่อบ่งบอกว่าข้อความจะต้องขึ้นต้นด้วยสิ่งที่เรากำหนด ในที่นี้คือคลาสของตัวอักษร [a-z]
นั่นหมายความว่าตอนนี้ชื่อผู้ใช้จะสามารถขึ้นต้นด้วยตัวอักษร a - z ได้เท่านั้น
[a-z0-9]{3,9}$
ต่อมาเป็นการกำหนดคลาสตัวอักษร [a-z0-9]
ซึ่งหมายความว่าชื่อผู้ใช่สามารถมีได้เพียงตัวอักษรตัวพิมพ์เล็ก a - z
และตัวเลข 0 - 9
เท่านั้น และรูปแบบ {4,9}
เป็นการกำหนดความยาวว่ามันต้องมีความยาวอยู่ระหว่าง 3 ถึง 9 ตัวอักษร และรวมกับรูปแบบส่วนแรก ^[a-z]
หนึ่งตัวอักษรเป็น 10 ตัวอักษร
ในบทนี้เราแค่แนะนำการใช้งาน Regular expression ร่วมกับเมธอดของ String เท่านั้น อย่างไรก็ตาม คุณจะได้เรียนรู้เกี่ยวกับ Regular expression อีกครั้งในบท Regular expression ในภาษา Ruby
เมธอดจัดรูปแบบ String
ต่อไปเราจะพูดถึงเมธอดที่ใช้สำหรับจัดรูปแบบของ String เช่นการเติมข้อความเข้าไปยัง String ให้ได้ตามความยาวที่กำหนด ซึ่งในภาษา Ruby นั้นมีอยู่สามเมธอดที่เราใช้เป็นส่วนมาก นี่เป็นตัวอย่าง
puts "Ruby".center(12)
puts "Ruby".center(12, "#")
puts "Python".ljust(12)
puts "Python".ljust(12, "#")
puts "Java".rjust(12)
puts "Java".rjust(12, "#")
เมธอดทั้งสามนั้นใช้สำหรับกำหนดความกว้างให้กับ Stringให้มีความยาวตามที่ต้องการ ในตัวอย่าง เราได้กำหนดความกว้างให้กับ String ทั้งหมดเป็น 12
แต่สิ่งที่แตกต่างกันคือเมธอด center
จะจัดให้ข้อความอยู่ตรงกลาง เมธอด ljust
จะจัดให้ข้อความอยู่ทางด้านซ้าย และเมธอด rjust
จะจัดให้ข้อความอยู่ทางด้านขวา
ถ้าหากคุณใส่ค่าตัวอักษรในอาร์กิวเมนต์ที่สอง ตัวอักษรนี้จะถูกนำมาใช้ในการเติมข้อความให้เต็มตามจำนวนที่กำหนดแทนช่องว่าง
Ruby
####Ruby####
Python
Python######
Java
########Java
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
นอกจากนี้เมธอดเหล่านี้อาจมีประโยชน์ในกรณีที่คุณต้องการสร้าง ID ของตัวเลขที่มี 5 ตัวหลักเสมอ โดยการนำหน้าตัวเลขด้วย 0
เพื่อให้ครบตัวหลัก นี่เป็นตัวอย่าง
puts 1.to_s.rjust(5, "0")
puts 2.to_s.rjust(5, "0")
puts 3.to_s.rjust(5, "0")
puts 34.to_s.rjust(5, "0")
puts 150.to_s.rjust(5, "0")
ในตัวอย่าง คุณอาจจะสมมติว่าคุณต้องการสร้างรหัสของสินค้าจาก ID ของมัน โดยที่ในตอนแสดงผลมันจะต้องแสดงตัวเลขเป็น 5 หลักเสมอ เมื่อให้ง่ายต่อการดูหรือตรวจสอบ เราสามารทำเช่นนี้ได้ด้วยเมธอด rjust
00001
00002
00003
00034
00150
นี่เป็นผลลัพธ์การทำงานของโปรแกรม ในตอนนี้ รหัสสินค้าของเราจะแสดงเป็นตัวเลข 5 หลักเสมอ
เมธอดที่ใช้วนรอบ String
ในกรณีที่เราต้องการวนรอบตัวอักษรใน String เพื่อทำงานบางอย่างกับตัวอักษรเหล่านั้น Ruby มีเมธอดเหล่านี้ที่คุณอำนวยความสะดวกให้คุณ โดยไม่ต้องเขียนคำสั่ง for เพื่อวนอ่านค่าเอง นี่เป็นตัวอย่างการใช้งาน
str = "marcuscode"
str.each_char { |ch|
print "#{ch} "
}
puts
str.each_byte { |b|
print "#{b} "
}
puts
ในตัวอย่าง เป็นการใช้เมธอดเพื่อวนตัวอักษรใน String เมธอดเหล่านี้มีอาร์กิวเมนต์เป็นบล็อคที่จะถูกเรียกใช้ในการวนแต่ละรอบ และค่าที่วนจะถูกส่งเข้าไปผ่านตัวแปรที่เรากำหนดไว้ในบล็อค เมธอด each_char
ใช้เพื่อวนตัวอักษรใน String เมธอด each_byte
ใช้เพื่อวนตัวอักษรใน String แต่จะส่งค่า Byte ของตัวอักษรเข้าไปในบล็อคแทน
m a r c u s c o d e
109 97 114 99 117 115 99 111 100 101
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
ถ้าหากคุณต้องการวนตัวอักษรโดยเริ่มจากตัวสุดท้ายของ String คุณสามารถเรียกใช้เมธอด reverse
ก่อนเมธอด each_char ได้
str = "marcuscode"
str.reverse.each_char { |ch|
print "#{ch} "
}
การแปลงจาก String ไปยังข้อมูลอื่น
สำหรับเรื่องสุดท้ายในบทเรียนนี้ เราจะพูดเกี่ยวกับการแปลง String ไปยังข้อมูลประเภทอื่นๆ ในภาษา Ruby เช่น ตัวเลข หรือ Symbol
หลายครั้งที่เราทำงานกับ String ในภาษา Ruby เราอาจจะต้องการแปลงค่าเหล่านั้นไปยังข้อมูลประเภทอื่น ตัวอย่างที่เห็นได้บ่อยก็คือการรับค่าจากทางคีย์บอร์ดด้วยเมธอด gets
เนื่องจากเมธอดดังกล่าวรับค่ามาเป็น String ดังนั้นในการนำมันไปใช้คำนวณทางตัวเลข เราจำเป็นต้องการแปลง String ดังกล่าวให้เป็นตัวเลขก่อน
puts "3.15".to_f
puts "123.456e1".to_f
puts "123".to_i
puts "-5.2".to_i
puts "10010011010".to_i(2)
puts "2232".to_i(8)
puts "1178".to_i(10)
puts "49a".to_i(16)
ในตัวอย่างแรก เมธอด to_f
ใช้สำหรับแปลงค่าของ String ให้เป็นตัวเลขเทศนิยม ส่วนเมธอด to_i
ใช้สำหรับแปลงค่าของ String ให้เป็นตัวเลขจำนวนเต็ม สำหรับเมธอด to_i
คุณสามารถกำหนดอาร์กิวเมนต์เพื่อระบุว่าแปลงจากเลขฐานไหนได้ ในตัวอย่าง เราได้แปลง String ที่อยู่ในรูปแบบฐานสอง ฐานแปด ฐานสิบ และฐานสิบหก ซึ่งทั้งหมดนั้นมีค่าเท่ากับ 1178
ในฐานสิบ
3.15
1234.56
123
-5
1178
1178
1178
1178
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
puts "2".to_c
puts "3.5".to_c
puts "2/5".to_c
puts "2".to_r
puts "300/2".to_r
puts "-9.2".to_r
puts "th".to_sym
puts "de".to_sym
ตัวอย่างต่อมา เมธอด to_c
ใช้แปลงค่าของ String ให้เป็นตัวเลขจำนวนเชิงซ้อน เมธอด to_r
ใช้แปลงค่าของ String ให้เป็นตัวเลขแบบเศษส่วน และสุดท้ายเมธอด to_sym
ใช้แปลงค่าของ String ให้เป็น Symbol
เมธอด to_sym
นี้อาจจะมีประโยชน์ในกรณีที่คุณต้องการสร้าง Symbol ในขณะที่โปรแกรมทำงานอยู่ เช่น การสร้าง Index ของ Hash จากข้อความที่คำนวณได้ในโปรแกรม
2+0i
3.5+0i
2/5+0i
2/1
150/1
-46/5
th
de
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
และนี่ก็เป็นทั้งหมดสำหรับเนื้อหาของเมธอด String ที่เราได้สรุปมาให้คุณได้ดู อย่างไรก็ตาม คลาสของ String ยังมีเมธอดอีกเป็นจำนวนมากที่เรายังไม่ได้พูดถึง แต่จากตัวอย่างที่เราได้ยกมานี้ก็น่าจะเพียงพอสำหรับการเขียนโปรแกรมในเบื้องต้น
อย่างไรก็ตาม ถ้าหากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเมธอดทั้งหมดของ String สามารถดูได้ที่เอกสารของ Ruby เองที่ https://ruby-doc.org/core-2.7.0/String.html