题目链接:小美的用户名。
题目描述
小美是美团的前端工程师,为了防止系统被恶意攻击,小美必须要在用户输入用户名之前做一个合法性检查,一个合法的用户名必须满足以下几个要求:
- 用户名的
首字符
必须是大写或者小写字母。 - 用户名只能够包含
大小写字母、数字
。 - 用户名需要包含至少一个
字母或者数字
。
若用户名合法,则输出Accept
,反之则输出Wrong
。
解题步骤
首先考虑输入的情况,这里借助Node模块fs
,用来处理文件的读写、复制、删除、重命名等操作。
let fs = require('fs');
读取文件并且保存文件内容的每一行,这里分别介绍api:
const lines = fs.readFileSync(0).toString().trim().split(/\r\n|\r|\n/);
readFileSync
readFileSync
同步读取文件,可以传入两个参数:
- 第一个参数代表着文件路径;
- 第二个参数代表着读取文件的编码方式(可以省略)。
toString
方法将把数字转换为字符串,如下代码示例:
var num = 15;
var n = num.toString();
console.log(n);
trim
方法负责去除字符串首部和尾部的空格:
trim()
方法用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等。trim()
方法不会改变原始字符串。trim()
方法不适用于 null, undefined, Number 类型。
JavaScript的split
方法负责把一个字符串分割成字符串数组。
提示: 如果把空字符串 (“”) 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
注意: split() 方法不改变原始字符串。
定义正则表达式变量regName
const regName = /^[a-zA-Z][0-9a-zA-Z]*[0-9]+[0-9a-zA-Z]*$/
在JavaScript中创建正则表达式如下规则:
var reg = /正则表达式/修饰符
其中修饰符定义如下:
i
:ignoreCase, 匹配忽视大小写。g
:标识全局匹配。m
:multiline , 多行匹配。
正则匹配test()
方法:
test()
方法是一个正则表达式方法。
test()
方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
以下实例用于搜索字符串中的字符 “e”,具体代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test正则匹配</title>
</head>
<body>
<script>
var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free"));
</script>
</body>
</html>
其他正则表达式规则定义请见该文:JavaScript正则。
代码
const fs = require('fs')
const lines = fs.readFileSync(0).toString().trim().split(/\r\n|\r|\n/)
const T = lines[0]
const regName = /^[a-zA-Z][0-9a-zA-Z]*[0-9]+[0-9a-zA-Z]*$/
for(let i = 1 ; i < lines.length ; i++){
if(regName.test(lines[i])) console.log('Accept')
else console.log('Wrong')
}