我有以下3个功能。 我似乎无法得到正确的正则表达式 请帮助我
//Allow Alphanumeric,dot,dash,underscore but prevent special character and space
function Usernames(txtName) {
if (txtName.value != '' && txtName.value.match(/^[0-9a-zA-Z.-_]+$/) == null) {
txtName.value = txtName.value.replace(/[\W- ]/g, '');
}
}
//Allow Alphanumeric,dot,dash,underscore and space but prevent special characters
function Fullnames(txtName) {
if (txtName.value != '' && txtName.value.match(/^[a-zA-Z0-9. -_]+$/) == null) {
txtName.value = txtName.value.replace(/[\W-]/g, '');
}
}
//Allow Alphanumeric,dot,dash,underscore the "@" sign but prevent special character and space
function Email(txtName) {
if (txtName.value != '' && txtName.value.match(/^[a-zA-Z0-9.-_@]+$/) == null) {
txtName.value = txtName.value.replace(/[\W-]/g, '');
}
}
答案 0 :(得分:0)
你不要写正则表达式来防止"东西;他们不是黑名单,而是白名单。所以,如果有人发送了一个你不想要它的角色,因为你的正则表达式允许他们这样做。我对你的具体问题的猜测与.-_
部分有关。在正则表达式中,X-Y
表示"从X到Y"所以这将转化为"来自的一切。 (ASCII 2E)到_(ASCII 5F)"具有讽刺意味的是,包括所有大写和小写字母,数字0到9,/
,:
,;
和@
等等。为了避免这种情况,您可能应该将此部分更改为:.\-_
,因为斜杠将转义破折号。但是,这仍然会让您的用户使用.Bob
或-Larry
之类的名称而您可能不想要这样,所以您的正则表达式可能应该是:
/^[0-9a-zA-Z][0-9a-zA-Z.\-_]*$/
这将要求第一个字符为字母数字,其余任何字母为字母数字,.
,-
或_
。
您还要检查您的值是否与此注册表匹配,而不是。我不确定Javascript中会包含什么,但我的猜测是它可能不是value == null