用于验证的正则表达式不起作用

时间:2010-06-09 15:06:22

标签: javascript html regex validation

我在表单中有一个“description textarea”,用户可以在其中输入项目的描述。

在表单提交之前使用javascript验证。

其中一个验证步骤是:

  else if (!fld.value.match(desExp)){

和desExp:

 var desExp = /^\s*(\w[^\w]*){3}.*$/gm;

现在我的问题,这在所有情况下都可以正常工作,除了描述BEGINS具有瑞典语特殊字符(å,ä,ö)的描述。

这不起作用:

    åäö hello world

但这会:

    hello world åäö

任何修复?

由于

2 个答案:

答案 0 :(得分:1)

我认为使用更广泛的类别会起作用,例如:

/^\s*([\wåäö][^\w]*){3}.*$/gm;

答案 1 :(得分:1)

除非我误解,否则您只是想验证该字符串是否包含至少3个字符? \ s *在开头告诉它寻找尽可能多的空白字符。然后模式(\ w [^ \ w] )将匹配任何单词字符,后跟零个或多个非单词字符。 {3}将断言有三个单词字符。最后的。将与字符串的其余部分匹配。

所以,如果我的理解和细分是​​正确的,那么你想要的就是这个,对吗?

/(\w\W*){3}/gm

它将匹配任何包含3个字符的字符串,无论它们内部是什么。它与你的略有不同,因为你的第一个单词字符之前只需要空格。我不确定这是不是你想要的,但如果是,请告诉我,我会修改它......

修改实际上,相关的I found this question

因此,考虑到这一点,你可以这样做:

var desExp = /^\s*([\w\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][^\w\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*){3}.*$/gm;

[\w\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]将匹配任何单词字符(UTF8或Latin-1)。