[解決済み】アクセント記号付き文字(ダイアクリティック)の具体的なJavaScript正規表現について)
質問
スタックオーバーフローで調べたところ、( 文字を置き換える......え , JavaScript が RegExp に関して Unicode 標準に従わない理由 という疑問に対する具体的な答えはまだ見つかっていません。 JavaScript はどのようにしてアクセント記号付きの文字(発音記号付き文字)をマッチングさせることができますか? "
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
.
私のもう一つの方法は
.
という文字クラスがあり、よりシンプルな表現になります。
var regex = /^.+,\s.+$/;
-
これなら、少なくとも形は何でもマッチする。
something, something
. それはそれでいいんだけど......。
最後のアプローチ、それは私がちょうど 発見 もっとシンプルに...
/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
- Unicode文字の範囲にマッチします。テストして動作していますが、おかしなことは試していませんし、私たちの言語学部で教員名に使われているような普通のものです。
以下は私の懸念事項です。
-
最初の解決策はあまりにも限定的で、しかもずさんで複雑なものです。1文字でも2文字でも忘れたら変更する必要があり、とても実用的とは言えません。
-
2つ目の解決策は簡潔で良いのですが、おそらく実際にマッチングさせるべき内容よりもはるかに多くマッチングしてしまいます。に関する本当のドキュメントを見つけることができませんでした。 まさに 何
.
は、単に "改行文字以外のすべての文字" という一般化された文字にマッチします("quot "は、"quot "を意味します)。 MDN ). -
3番目の解決策が最も正確なように見えますが、何かゴチャゴチャしているのでしょうか?私はUnicodeにあまり詳しくありませんが、少なくとも実際のところ コード表 / 続き ,
\u00C0-\u017F
は、少なくとも私の予想する入力に対しては、かなり強固なものであると思われます。
- 教員は母国語(アラビア語、中国語、日本語など)で名前を書いて提出することはないので、ラテン文字セット外の文字について心配する必要はありません。
この3つのアプローチのうち、どれが最も適しているのでしょうか?それとも、もっと良い解決策があるのでしょうか?
どのように解決するのか?
すべてのアクセントを受け入れるための簡単な方法はこうです。
[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 [ ] ^ \ × ÷
参照 ユニコード文字表 をクリックすると、数字順に並んだ文字が表示されます。
関連
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】module.exports "モジュールが定義されていません"
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] Pythonのunicode文字列のアクセントを除去(正規化)する最良の方法は何ですか?
-
[解決済み】MySQLで正規表現による置換を行うには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み】react router v^4.0.0 Uncaught TypeError: 未定義のプロパティ'location'を読み取れない
-
[解決済み】Javaの文字列から✅、✈、♛などの絵文字/画像/記号を削除する