ยินดีต้อนรับสู่ Unicode
การแก้ปัญหาทั้งหมดเหล่านี้ผิดหลักสำหรับข้อความสมัยใหม่ คุณต้องใช้สิ่งที่เข้าใจกรณีและปัญหา ตั้งแต่บ๊อบถามหาภาษาอื่นฉันจะให้ Perl สองสามอัน
ฉันมีวิธีแก้ปัญหาสี่แบบตั้งแต่แย่ที่สุดไปจนถึงดีที่สุด สิ่งที่ดีที่สุดเท่านั้นที่ถูกต้องเสมอ คนอื่นมีปัญหา นี่คือการทดสอบเพื่อแสดงให้คุณเห็นว่าอะไรใช้งานได้และอะไรที่ไม่ได้และที่ไหน ฉันใช้ขีดเส้นใต้เพื่อให้คุณสามารถดูได้ว่ามีการเว้นช่องว่างไว้ที่ไหนและฉันทำเครื่องหมายว่าอะไรผิดนั่นก็ผิด
Testing TheLoneRanger
Worst: The_Lone_Ranger
Ok: The_Lone_Ranger
Better: The_Lone_Ranger
Best: The_Lone_Ranger
Testing MountMᶜKinleyNationalPark
[WRONG] Worst: Mount_MᶜKinley_National_Park
[WRONG] Ok: Mount_MᶜKinley_National_Park
[WRONG] Better: Mount_MᶜKinley_National_Park
Best: Mount_Mᶜ_Kinley_National_Park
Testing ElÁlamoTejano
[WRONG] Worst: ElÁlamo_Tejano
Ok: El_Álamo_Tejano
Better: El_Álamo_Tejano
Best: El_Álamo_Tejano
Testing TheÆvarArnfjörðBjarmason
[WRONG] Worst: TheÆvar_ArnfjörðBjarmason
Ok: The_Ævar_Arnfjörð_Bjarmason
Better: The_Ævar_Arnfjörð_Bjarmason
Best: The_Ævar_Arnfjörð_Bjarmason
Testing IlCaffèMacchiato
[WRONG] Worst: Il_CaffèMacchiato
Ok: Il_Caffè_Macchiato
Better: Il_Caffè_Macchiato
Best: Il_Caffè_Macchiato
Testing MisterDženanLjubović
[WRONG] Worst: MisterDženanLjubović
[WRONG] Ok: MisterDženanLjubović
Better: Mister_Dženan_Ljubović
Best: Mister_Dženan_Ljubović
Testing OleKingHenryⅧ
[WRONG] Worst: Ole_King_HenryⅧ
[WRONG] Ok: Ole_King_HenryⅧ
[WRONG] Better: Ole_King_HenryⅧ
Best: Ole_King_Henry_Ⅷ
Testing CarlosⅤºElEmperador
[WRONG] Worst: CarlosⅤºEl_Emperador
[WRONG] Ok: CarlosⅤº_El_Emperador
[WRONG] Better: CarlosⅤº_El_Emperador
Best: Carlos_Ⅴº_El_Emperador
BTW เกือบทุกคนที่นี่ได้เลือกวิธีแรกวิธีหนึ่งที่ทำเครื่องหมายว่า "แย่ที่สุด" มีบางคนเลือกวิธีที่สองโดยระบุว่า "ตกลง" แต่ไม่มีใครก่อนหน้าฉันแสดงให้คุณเห็นวิธีการทำแบบ "ดีกว่า" หรือ "ดีที่สุด"
นี่คือโปรแกรมทดสอบที่มีสี่วิธี
#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
# First I'll prove these are fine variable names:
my (
$TheLoneRanger ,
$MountMᶜKinleyNationalPark ,
$ElÁlamoTejano ,
$TheÆvarArnfjörðBjarmason ,
$IlCaffèMacchiato ,
$MisterDženanLjubović ,
$OleKingHenryⅧ ,
$CarlosⅤºElEmperador ,
);
# Now I'll load up some string with those values in them:
my @strings = qw{
TheLoneRanger
MountMᶜKinleyNationalPark
ElÁlamoTejano
TheÆvarArnfjörðBjarmason
IlCaffèMacchiato
MisterDženanLjubović
OleKingHenryⅧ
CarlosⅤºElEmperador
};
my($new, $best, $ok);
my $mask = " %10s %-8s %s\n";
for my $old (@strings) {
print "Testing $old\n";
($best = $old) =~ s/(?<=\p{Lowercase})(?=[\p{Uppercase}\p{Lt}])/_/g;
($new = $old) =~ s/(?<=[a-z])(?=[A-Z])/_/g;
$ok = ($new ne $best) && "[WRONG]";
printf $mask, $ok, "Worst:", $new;
($new = $old) =~ s/(?<=\p{Ll})(?=\p{Lu})/_/g;
$ok = ($new ne $best) && "[WRONG]";
printf $mask, $ok, "Ok:", $new;
($new = $old) =~ s/(?<=\p{Ll})(?=[\p{Lu}\p{Lt}])/_/g;
$ok = ($new ne $best) && "[WRONG]";
printf $mask, $ok, "Better:", $new;
($new = $old) =~ s/(?<=\p{Lowercase})(?=[\p{Uppercase}\p{Lt}])/_/g;
$ok = ($new ne $best) && "[WRONG]";
printf $mask, $ok, "Best:", $new;
}
เมื่อคุณสามารถให้คะแนนเหมือนกับ "ดีที่สุด" ในชุดข้อมูลนี้คุณจะรู้ว่าคุณทำอย่างถูกต้อง ก่อนหน้านั้นคุณยังไม่ได้ ไม่มีใครที่นี่ทำได้ดีไปกว่า "โอเค" และส่วนใหญ่จะทำมัน "แย่ที่สุด" ฉันหวังว่าจะเห็นใครบางคนโพสต์รหัสที่ถูกต้อง
ฉันสังเกตเห็นว่าโค้ดการไฮไลต์ของ StackOverflow นั้นน่ารำคาญอีกครั้ง พวกเขากำลังทำง่อยเก่า ๆ เหมือนกัน (ส่วนใหญ่ แต่ไม่ใช่ทั้งหมด) จากแนวทางที่น่าสงสารที่เหลือที่กล่าวถึงที่นี่ เวลาผ่านไปนานหรือไม่ที่จะให้ ASCII พักบ้าง? มันไม่สมเหตุสมผลอีกต่อไปและการแกล้งทำเป็นทุกอย่างที่คุณมีก็ผิด มันทำให้รหัสไม่ดี