I am making an app where if a user has "@username" in a text, it tags them and sends notification.
I tried to doing this by using this regex /\B(\@[a-zA-Z]+\b)(?!;)/ this works but I dont want it to consider it valid when there is more than one "@".
For example:
@username - valid
@@username - invalid
hey @username - valid
@usern@name - invalid
hey@username - invalid
You can use regex ^@[a-z]+$
function isValid(str) {
const regex = /^@[a-z]+$/;
return str.split(" ").some((s) => regex.test(s));
}
console.log(isValid("@username"))
console.log(isValid("hey @username"))
console.log(isValid("@@username"))
console.log(isValid("@usern@name"))
console.log(isValid("hey@username"))
(?<=\s|^\s?)@[a-zA-Z]+(?=\s|\s?$) might work.
const testcase = ['@username', '@@username', 'hey @username', '@usern@name', 'hey@username', 'hey @username hey', '@username hey'];
testcase.forEach(text => {
console.log(text + ' => ' +
/(?<=\s|^\s?)@[a-zA-Z]+(?=\s|\s?$)/.test(text)
);
});
Regex that will help you acheive the task you want -
^@[A-z0-9_-.]+$
Assuming that you will also encounter usernames such as -
@user.name
@user-name
@user_name
@user.name.
@User_name