我有这个表达:
$(document).ready(function(){
$.validator.addMethod(
"regex",
function(value, element) {
return this.optional(element) || /^(?!.*www)(?!.*http)(?!.*@)(?!.*\.com)(?!.*\.pt)(?!.*co\.uk).+$/i.test(value);
},
"Description field can not include e-mail and/or urls."
);
$("#regForm").validate();
});
如果我有这样的文字,我会收到错误,因为换行
A Loja virtual possui uma vasta linha de bijouterias folheadas a ouro e prata. São produtos bastante procurados e com preços muito acessíveis(50% de desconto no atacado).
Ha mais de 10 anos no mercado de folheados.
Produtos de excelente qualidade.
如果我有这个文字,没有换行符,它可以正常工作:
A Loja virtual possui uma vasta linha de bijouterias folheadas a ouro e prata. São produtos bastante procurados e com preços muito acessíveis(50% de desconto no atacado).Ha mais de 10 anos no mercado de folheados.Produtos de excelente qualidade.
我该如何解决这个问题?
答案 0 :(得分:9)
.
与换行符不匹配。通常,s
(称为singleline
或dotall
)修饰符会更改。不幸的是,JavaScript不支持它。
有一个(一个稍微冗长的)伎俩来解决这个问题。字符类[\s\S]
匹配任何空格和任何非空格字符。即任何角色。所以你需要这样做:
/^(?![\s\S]*www)(?![\s\S]*http)(?![\s\S]*@)(?![\s\S]*\.com)(?![\s\S]*\.pt)(?![\s\S]*co\.uk)[\s\S]+$/i
或者,(仅在JavaScript中)您可以使用“蜡烛运算符”[^]
,它也匹配任何单个字符(因为它是空字符类的否定,即它匹配不在空集中的任何字符)。无论你发现或多或少的可读性都是一个品味问题我猜:
/^(?![^]*www)(?![^]*http)(?![^]*@)(?![^]*\.com)(?![^]*\.pt)(?![^]*co\.uk)[^]+$/i