Stack Overflowで調べてみた(文字を置き換える...えー、JavaScript が RegExp に関して Unicode 標準に準拠していない理由など) について調べており、「 JavaScript はアクセント付き文字 (発音区別符号付きの文字) をどのように一致させることができるのか?」という質問に対する具体的な答えは見つかっていません。
UI のフィールドをlast_name, first_name
(last [comma space] first)という形式に強制的に一致させ、発音区別記号のサポートを提供したいのですが、JavaScript では他の言語/プラットフォームよりも少し難しいようです。
これは、発音区別符号のサポートを追加したいと思ったときの元のバージョンです。
/^[a-zA-Z]+,\s[a-zA-Z]+$/
現在、サポートを追加する 3 つの方法のうち 1 つを検討中です。これらはすべてテスト済みで、問題なく動作します (少なくともある程度は動作しますが、2 番目のアプローチの「範囲」がどの程度なのかはよくわかりません)。これらは次のとおりです。
有効として受け入れたいすべてのアクセント付き文字を明示的にリストします(不十分で複雑すぎる):
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àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+$/
- これは、 でサポートされているアクセント付き文字のいずれかを含む姓/名に正しく一致します
accentedCharacters
。
私のもう一つのアプローチは、文字クラスを使用して.
、より単純な表現にすることでした。
var regex = /^.+,\s.+$/;
- これは、少なくとも次の形式では、ほぼ何にでも一致します
something, something
。これで大丈夫だと思います...
最後のアプローチは、私が見つかったもっと簡単かもしれません...
/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
- これは、さまざまな Unicode 文字と一致します。テスト済みで動作していますが、私は何も奇抜なことは試していません。言語学科で教員の名前によく見かける通常の文字だけです。
私の懸念は次のとおりです:
最初の解決策はあまりにも制限が多く、雑で複雑です。1、2 文字忘れた場合は変更する必要があり、あまり実用的ではありません。
2番目の解決法は簡潔で良いですが、おそらく実際よりもはるかに多くの一致が見られます。何が一致するかを正確に示す実際のドキュメントは見つかりませんでしたが
.
、単に「改行文字以外の任意の文字」という一般化が見られました(翻訳)。3番目の解決策は最も正確であるように思われますが、何か落とし穴はありますか?私は少なくとも実際にはUnicodeにあまり詳しくありませんが、コード表/その表の続き
\u00C0-\u017F
少なくとも私が期待する入力に関しては、かなりしっかりしているようです。
- 教員は母国語(アラビア語、中国語、日本語など)で名前を記入したフォームを提出しないので、ラテン文字セット以外の文字について心配する必要はありません。
これら 3 つのアプローチのうち、どれがこのタスクに最も適しているでしょうか? あるいは、より優れた解決策があるでしょうか?
ベストアンサー1
すべてのアクセントを受け入れるためのより簡単な方法は次のとおりです。
[A-zÀ-ú] // accepts lowercase and uppercase characters
[A-zÀ-ÿ] // as above, but including letters with an umlaut (includes [ ] ^ \ × ÷)
[A-Za-zÀ-ÿ] // as above but not including [ ] ^ \
[A-Za-zÀ-ÖØ-öø-ÿ] // as above, but not including [ ] ^ \ × ÷
見るUnicode 文字表数字順にリストされた文字。