Stack Overflow'a baktım ( karakterleri değiştiriyorum .. eh , JavaScript'in RegExp , vb. İle ilgili Unicode standardını nasıl takip etmediği ) ve soruya somut bir cevap bulamadım:
How can JavaScript match for accented characters (those with diacritical marks)?
Bir alanı UI biçimiyle eşleşmeye zorluyorum: last_name, first_name
(son [virgül alanı] ilk) , ve aksan için destek sağlamak istiyorum, ancak açıkça JavaScript'te diğer dillerden / platformlardan biraz daha zor.
Aksan desteği eklemek isteyinceye kadar bu benim orijinal versiyonumdu:
/^[a-zA-Z]+,\s[a-zA-Z]+$/
Şu anda, desteklediğim ve desteklediğim üç yöntemden birini tartışıyorum (en azından bir dereceye kadar, "yaklaşımın" ikinci yaklaşımın ne olduğunu gerçekten bilmiyorum). İşte buradalar:
Açıkça geçerli olarak kabul etmek istediğiniz tüm aksanlı karakterleri listeleme (topal ve aşırı karmaşık):
var accentedCharacters = "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ";
// Build the full regex
var regex = "^[a-zA-Z" + accentedCharacters + "]+,\\s[a-zA-Z" + accentedCharacters + "]+$";
// Create a RegExp from the string version
regexCompiled = new RegExp(regex);
// regexCompiled = /^[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+,\s[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+$/
- Bu, soyadı / adı ile desteklenen aksanlı karakterlerden herhangi biriyle doğru bir şekilde eşleşir
accentedCharacters
.
Diğer yaklaşımım, .
daha basit bir ifadeye sahip olmak için karakter sınıfını kullanmaktı :
var regex = /^.+,\s.+$/;
- Bu, en azından şu şekilde, hemen hemen her şeyle eşleşir
something, something
. Herhalde bu ...
Bulduğum son yaklaşım daha basit olabilir ...
/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
- Test edilen ve çalışan bir dizi unicode karakterle eşleşiyor, ancak çılgın bir şey denemedim, sadece fakülte üyesi isimleri için dil departmanımda gördüğüm normal şeyler.
İşte endişelerim:
- İlk çözüm çok sınırlayıcı ve özensiz ve kıvrımlı. Bir ya da iki karakteri unutursam değiştirilmeli ve bu çok pratik değil.
- İkinci çözüm daha iyi, özlüdür, ancak muhtemelen olması gerekenden çok daha fazla uyuşmaktadır. Ben herhangi bir gerçek belgelere bulamadı tam olarak neyi
.
maçları, (bir tablodan "satır karakteri hariç herhangi bir karakter" sadece genelleme MDN'yi ). Üçüncü çözüm en kesin gibi görünüyor, ama herhangi bir gotcha var mı? Ben en azından pratikte Unicode ile çok aşina değilim ama bakarak kod tablosu / O masanın devamında ,
\u00C0-\u017F
en azından benim beklenen girişi için, oldukça sağlam görünüyor.- Fakülte isimleri kendi dillerinde (örneğin Arapça, Çince, Japonca, vb.) Formlar göndermeyecektir, bu yüzden Latin karakterleri dışında kalan karakterler hakkında endişelenmem gerekmiyor
Yani asıl soru (lar) : Bu üç yaklaşımdan hangisi görev için en uygun? Yoksa daha iyi çözümler var mı?
regex = /^[^,]+,\s[^,]+$/;
önlemek için bir şey kullanabilirsiniz .