regex 创建一个特殊字符不能跟在句点后面的正则表达式?

yizd12fk  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(129)

我正在做一个正则表达式的电子邮件验证。
这是我目前掌握的情况:

(?!^.*([._%+$-])\1+.*$)^[a-zA-Z0-9][a-zA-Z0-9._%+$-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,7}$

我已经得到了它满足所有这些要求:
1.连续的句点(注意,地址中可以出现多个句点,必须用有效字符分隔)。示例customer@yahoo.. com
1.以特殊字符开头的用户名。例如#customer@yahoo.com
1.一行中包含两个特殊字符的用户名。例如cu$$tomer@yahoo.com
1.后缀名最小长度为2。无效长度示例:客户@雅虎.c
1.后缀最大长度为7。无效长度示例:customer@yahoo.commmmmmm
但我被最后一条卡住了:
1.用户名特殊字符不能跟在句点后面。示例customer.name.#name2@yahoo.com
我尝试添加第二个负前瞻,如下所示,但无法使其正常工作。:

(?!^.*([._%+-])\1+.*$)(?!^.*(.)\2+([._%+-])$)^[a-zA-Z0-9][a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,7}$

任何帮助都非常感谢!

1zmg4dgp

1zmg4dgp1#

这个正则表达式应该可以完成您想要的操作

/^(?!^.*([._%+-])\1+.*$)(?!^[^@]*\.[^@]*[._%+-])[a-zA-Z0-9][a-zA-Z0-9._%+-]*@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,7}$/;
const emailRegex = /^(?!^.*([._%+-])\1+.*$)(?!^[^@]*\.[^@]*[._%+-])[a-zA-Z0-9][a-zA-Z0-9._%+-]*@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,7}$/;

// Test valid email addresses
console.log(emailRegex.test('customer@yahoo.com')); 
console.log(emailRegex.test('customer.name@yahoo.com')); 
console.log(emailRegex.test('customer_name@yahoo.com')); 

console.log("---------------------")

// Test invalid email addresses
console.log(emailRegex.test('customer@yahoo..com'));
console.log(emailRegex.test('#customer@yahoo.com')); 
console.log(emailRegex.test('cu$$tomer@yahoo.com')); 
console.log(emailRegex.test('customer@yahoo.c')); 
console.log(emailRegex.test('customer@yahoo.commmmmmm')); 
console.log(emailRegex.test('customer.name.#name2@yahoo.com'));
z2acfund

z2acfund2#

你可以试试这个:

^([[:alpha:]]+)(.?)([[:alpha:]]*)(\.([[:alpha:][:digit:]]*))?@[[:alpha:]]*\.[[:alpha:]]{3,7}\b

参见:https://regex101.com/r/4IYjU9/1

相关问题