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