我想从用户输入的字符串中提取用户名。问题是我不想只是简单地验证用户名,但我想向用户显示即使用户输入任何不允许的字符也将是最终用户名。
例如,如果用户输入类似&%$User)(Nam-e
的内容,则会显示usernam-e
回答Regular expression to validate username也有类似的问题,但当我尝试将其与Invalid group
或{{1}一起使用时,它在某种程度上给了我一个关于node {j}的错误match
函数。
无论如何,大多数在线示例仅验证针对正则表达式的用户名,但实际上并未提供相应用户名的结果。
规则如下:
exec
/ _username
)。username_
)。user_-.name
)。到目前为止,我只能使用user__name
函数次数做类似的事情
replace
但这看起来不是一个有效的代码,特别是我实际上需要添加更多value.replace(/[^\w-]*/g,'').replace(/^[^a-z]*/,'').replace(/-{2,}/g,'-').replace(/_{2,}/g,'_');
函数来提取适当的用户名。
任何想法如何实现?
答案 0 :(得分:1)
假设您希望名称以小写字母显示,如示例所示:
function user( n ) {
var name = n.replace( /^[^a-z]+|[^a-z\d_\-.]|[_\-.](?![a-z\d])/gi, '' );
if ( n != name ) {
console.log( 'Username invalid' );
}
return name.toLowerCase();
}
user('&%$User)(Nam-e'); // Username invalid, usernam-e
user('_Giedrius_one_'); // Username invalid, giedrius_one
user('Giedrius--one'); // Username invalid, giedrius-one
user('Giedrius-one'); // giedrius-one
user('/.bob_/'); // Username invalid, bob