我需要一些帮助来创建正则表达式。只是我不太了解如何创建正则表达式。如何使用类似这样的规则为用户名创建验证
仅允许使用大写,小写,下划线(_)和点(。)
以下划线(_)开头
我已经在mozilla开发人员网站上尝试过一些正则表达式,但这似乎不正确
var usernameRegex = new RegExp(/_+[A-Za-z]/);
var usernameRegexFound = usernameRegex.test(username.value);
if (!usernameRegexFound) {
msg = "Invalid Username";
}
我希望这样的用户名
_username = true
_username1 =假
.username = false
用户名=假
还有什么网站可以让我了解如何创建正则表达式,因为我还有更多事要做
function validuser(username) {
var msg = "valid";
var usernameRegex = new RegExp(/_+[A-Za-z]/);
var usernameRegexFound = usernameRegex.test(username);
if (!usernameRegexFound) {
msg = "Invalid Username";
}
return msg;
}
console.log(validuser("_username","Valid?"));
console.log(validuser("_username1","Invalid?"));
console.log(validuser(".username","Invalid?"));
console.log(validuser("username","Invalid?"));
答案 0 :(得分:-1)
您描述的是^_[a-zA-Z._]+$
^
表示字符串的开头_
实际上就是您的下划线[a-zA-Z._]+
的上下,下划线和下划线1次或多次$
是字符串的结尾但是它允许__和_。作为用户名
const regex = /^_[a-zA-Z._]+$/gm;
const str = `_username
_username1
.username
username`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
document.write(`Found match, group ${groupIndex}: ${match}`);
});
}
答案 1 :(得分:-1)
创建正则表达式时,您可以使用https://regex101.com/帮助自己。
也就是说,这是您的正则表达式:
function test(username) {
const regex = new RegExp('^_{1}[A-Za-z\.]*$', 'i');
// Alternative version considering @thomas points
// const regex = new RegExp('^_[A-Za-z._]+$', 'i');
return regex.test(username);
}
console.log(test('test'));
console.log(test('_test'));
console.log(test('_te.s.t'));
console.log(test('_teST'));
console.log(test('Test_'));
console.log(test('^zdq^dz.'));
console.log(test('_teS/T'));
console.log(test('_9901A'));