私はスタックオーバーフロー(文字を置き換える..ええと、JavaScriptがどのようにRegExpに関するUnicode標準に準拠していないかなど)を調べましたが、質問に対する具体的な答えは見つかりませんでした。
How can JavaScript match for accented characters (those with diacritical marks)?
UIのフィールドをlast_name, first_name
(最後の[カンマスペース]が最初に)一致するように強制していて、発音区別符号のサポートを提供したいのですが、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
ます。
私のもう1つのアプローチは、.
文字クラスを使用して、より単純な式にすることでした。
var regex = /^.+,\s.+$/;
- これは、少なくとも次の形式で、ほぼすべてに一致します
something, something
。それは大丈夫だと思います...
私が見つけた最後のアプローチはもっと簡単かもしれません...
/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
- これは、Unicodeのさまざまな文字に一致します。テストして機能しましたが、クレイジーなことは何もしませんでした。
ここに私の懸念があります:
- 最初のソリューションは制限が多すぎ、ずさんで複雑です。1、2文字を忘れた場合は変更する必要がありますが、それはあまり実用的ではありません。
- 2番目のソリューションの方が簡潔ですが、実際よりもはるかに一致する可能性があります。正確に
.
一致するものに関する実際のドキュメントは見つかりませんでした。「改行文字を除くすべての文字」の一般化(MDNの表から)だけです。 3番目の解決策が最も正確なようですが、問題点はありますか?私は、少なくとも、実際には、Unicodeを使用した非常に慣れていないんだけど、見て、コード表 / そのテーブルの継続、
\u00C0-\u017F
少なくとも私の予想入力のために、かなり固体であるように思われます。- 教員は、母国語(例:アラビア語、中国語、日本語など)で名前が記載されたフォームを送信しないため、ラテン文字以外の文字セットの文字について心配する必要はありません。
だから本当の質問:これらの3つのアプローチのうちどれがタスクに最も適していますか?または、より良い解決策はありますか?
regex = /^[^,]+,\s[^,]+$/;
を防ぐようなものを使うことができます。