我有以下正则表达式执行此操作:
pattern='^.*(?=.{8,})(?=.*[a-zA-Z])(?=.*\d).*$'
不幸的是,不包括像德国ä,ö,ü这样的特殊字符,因此像1234567ä
这样的模式会失败。
有谁知道如何让他们进入这个表达式?我想它应该在(?=.*[a-zA-Z])
部分。
提前感谢您的努力
答案 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范围之外的非字母。
上述内容可能已经足够用于您的目的,但如果不是,则您必须确定所需的字符范围并明确指定。