题目链接:小美的用户名。
小美是美团的前端工程师,为了防止系统被恶意攻击,小美必须要在用户输入用户名之前做一个合法性检查,一个合法的用户名必须满足以下几个要求:
首字符必须是大写或者小写字母。大小写字母、数字。字母或者数字。若用户名合法,则输出Accept,反之则输出Wrong。
首先考虑输入的情况,这里借助Node模块fs,用来处理文件的读写、复制、删除、重命名等操作。
let fs = require('fs');
读取文件并且保存文件内容的每一行,这里分别介绍api:
const lines = fs.readFileSync(0).toString().trim().split(/\r\n|\r|\n/);
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() 方法不改变原始字符串。
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')
}