求支持多语言的Angular表单正则表达式(无重复等限制)
Angular表单多语言字符正则校验解决方案
需求明确
- 禁止输入任何空格
- 字段首尾不能出现逗号
- 不允许重复出现多语言字符(支持西班牙语、法语、德语等含特殊变音符号的字符)
问题现状
当前使用的正则无法满足全部校验需求,尝试过的多语言适配正则也未生效。
正确正则表达式
^(?!.*\s)(?!,)(?!.*,$)(?!.*(\p{L}).*\1)^[\p{L}](?:,[\p{L}])*$
正则规则拆解
(?!.*\s):全局校验,禁止出现任何空格(?!,):校验开头不能是逗号(?!.*,$):校验结尾不能是逗号(?!.*(\p{L}).*\1):禁止任何Unicode字母(涵盖所有语言的字母及变音符号)重复出现^[\p{L}](?:,[\p{L}])*$:确保内容为单个字母或字母以逗号分隔的序列,首尾均为有效字母
Angular表单代码示例
this.createForm = new FormGroup({ letters: new FormControl('', [ Validators.required, Validators.pattern(/^(?!.*\s)(?!,)(?!.*,$)(?!.*(\p{L}).*\1)^[\p{L}](?:,[\p{L}])*$/u) ]), });
注意:若使用字符串形式传入正则,需转义反斜杠,格式为
'^(?!.*\\s)(?!,)(?!.*,$)(?!.*(\\p{L}).*\\1)^[\\p{L}](?:,[\\p{L}])*$',推荐使用正则字面量更直观。
验证示例
不合法输入
- A,B,C,A(重复字符A)
- A, B,C,D(包含空格)
- A,B,C,D,(结尾为逗号)
- ,A,B,C,D(开头为逗号)
- Á,B,Á(重复字符Á)
合法输入
- A,E,I,O,U,Y,À,È,Ù,É,Â,Ê,Î,Ô,Û,Ë,Ï,Ü,Ÿ,Æ,Œ,Ç(无重复、无空格、首尾无逗号)
- A,E,U,O,I,Ä,Ü(格式合规)
- Á,Â,Ã,Ú,Í,E,Ê,É,Ó,Ô,O(无重复字符)
内容的提问来源于stack exchange,提问作者Nitesh
相关产品推荐
相关产品推荐

