javascript - 在js中使用正则表达式从字符串中提取正确的用户名

标签 javascript regex

我想从用户输入的字符串中提取用户名。问题是,我不想只是简单地验证用户名,但我想向用户显示最终的用户名,即使用户输入任何不允许的字符。

例如,如果用户输入类似 &%$User)(Nam-e 的内容,它将显示 usernam-e

有类似的问题和答案 Regular expression to validate username ,但不知何故,当我尝试将它与 matchexec 函数一起使用时,它在 node.js 上给了我一个 Invalid group 错误。

无论如何,大多数在线示例仅根据正则表达式验证用户名,但实际上并没有提供适当用户名的结果。

规则如下:

  1. 仅包含字母数字字符、下划线、破折号和点。
  2. 下划线、破折号和点不能位于用户名的末尾或开头 (例如_username/username_)。
  3. 下划线、破折号和点不能彼此相邻(例如 user_-.name)。
  4. 下划线、破折号或点不能连续使用多次(例如 用户名)。

到目前为止,我只能多次使用 replace 函数来执行类似的操作

value.replace(/[^\w-]*/g,'').replace(/^[^a-z]*/,'').replace(/-{2,}/g,'-').replace(/_{2,}/g,'_');

但这看起来不像是一个有效的代码,尤其是我实际上需要添加更多replace函数来提取适当的用户名。

有什么想法可以实现这一目标吗?

最佳答案

假设您希望名称以小写形式显示,如示例所示:

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                            

关于javascript - 在js中使用正则表达式从字符串中提取正确的用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430147/

相关文章:

javascript 模板引擎保持对文本框等的关注?

javascript - 什么是javascript中的正则表达式

python - 如何从字符串列表中删除单词列表

javascript - Angular ui 路由器不起作用

数组循环内的 Javascript 价格和数量调整

javascript - 无法从代码隐藏设置 div 样式

javascript - 从书签加载外部 JS?

java - 理解 Java 正则表达式

javascript - 从 url 中提取 vimeo 视频 ID

regex - 我可以在正则表达式中使用 Or 运算符来验证输入吗?