ユーザーが入力した文字列からユーザー名を抽出したい。問題は、単にユーザー名を検証するだけではなく、ユーザーが許可されていない文字を入力した場合でも、最終的なユーザー名をユーザーに表示したいということです。
たとえば、ユーザーが次のようなものを入力すると、次のよう&%$User)(Nam-eに表示されますusernam-e
正規表現を検証するユーザー名の回答と同様の質問がありますが、または関数Invalid groupで使用しようとすると、どういうわけかon node.jsのエラーが発生します。matchexec
とにかく、オンラインの例のほとんどは正規表現に対してユーザー名を検証するだけで、実際には適切なユーザー名の結果を提供しません。
ルールは次のとおりです。
- 英数字、アンダースコア、ダッシュ、およびドットのみが含まれます。
- アンダースコア、ダッシュ、およびドットをユーザー名の末尾または先頭に使用することはできません (例:
_username/username_)。 - アンダースコア、ダッシュ、およびドットを隣り合わせにすることはできません (例:
user_-.name)。 - アンダースコア、ダッシュ、またはドットを続けて複数回使用することはできません (例:
user__name)。
replaceこれまでのところ、関数を何度も使用して同様のことしかできませんでした
value.replace(/[^\w-]*/g,'').replace(/^[^a-z]*/,'').replace(/-{2,}/g,'-').replace(/_{2,}/g,'_');
replaceしかし、これは効率的なコードのようには見えません。特に、適切なユーザー名を抽出するには、実際にはさらに関数を追加する必要があります。
それを達成する方法はありますか?