在正则表达式中包含ö,ä,ü等特殊字符

时间:2016-04-01 21:28:35

标签: javascript regex html5

我有以下正则表达式执行此操作:

pattern='^.*(?=.{8,})(?=.*[a-zA-Z])(?=.*\d).*$'
  • 至少8个字符
  • 至少1个号码
  • 至少1个字母(大写或小写)

不幸的是,不包括像德国ä,ö,ü这样的特殊字符,因此像1234567ä这样的模式会失败。 有谁知道如何让他们进入这个表达式?我想它应该在(?=.*[a-zA-Z])部分。 提前感谢您的努力

1 个答案:

答案 0 :(得分:4)

答案取决于你想要做什么。

正如您所注意到的,[a-zA-Z]仅匹配没有变音符号的拉丁字母。

如果您只关心德语变音符号和ß连字符,那么您只需用[a-zA-ZäöüÄÖÜß]替换该部分,例如:

pattern='^.*(?=.{8,})(?=.*[a-zA-ZäöüÄÖÜß])(?=.*\d).*$'

但这可能不是你想要做的。您可能希望将拉丁字母与任何变音符号匹配,而不仅仅是德语中使用的那些。或许你想匹配任何字母表中的任何字母,而不仅仅是拉丁字母。

其他正则表达式方言有一些字符类可以帮助你解决这类问题,但不幸的是,JavaScript的正则表达式方言只有很少的字符类,而且没有一个能帮到你。

(如果您不知道,“字符类”是一个表达式,它匹配任何字符,该字符是预定义字符组的成员。例如,\w是一个匹配任何字符的字符类ASCII字母,数字或下划线,.是与任何字符匹配的字符类。)

这意味着您必须列出与您想要匹配的字符对应的每个UTF-16代码单元范围。

快速而肮脏的解决方案可能是[a-zA-Z\u0080-\uFFFF]或完整:

pattern='^.*(?=.{8,})(?=.*[a-zA-Z\\u0080-\\uFFFF])(?=.*\d).*$'

这将匹配ASCII范围内的任何字母,但也将匹配ASCII范围之外的任何字符。这包括所有可能的字母字符,在任何脚本中有或没有变音符号。但是,它还包括许多不是字母的字符。不包括ASCII范围内的非字母,但包括ASCII范围之外的非字母。

上述内容可能已经足够用于您的目的,但如果不是,则您必须确定所需的字符范围并明确指定。