问题描述
我正在尝试验证文本区域中的文本。 (我最终将使用带有这个正则表达式的 Angular 9 模式验证器)。你能帮我处理正则表达式吗?
文本将是 1 到 N 对字母数字字符,以逗号分隔,每对末尾有新行。每个字母数字前后的空格无关紧要。
示例数据(我不知道如何表示块引号中的换行符):
TEST12345、R5045876
EUDONOT1234、EF2345Y
AB345EEI2,FT0123
这是我在 RegExr 中为 Regex 尝试的方法,它似乎通过了,但我似乎无法将其用作我的模式字符串。
[ ]?[a-zAZ0-9](?:,[a-zA-Z0-9])*$
解决方法
你可以使用
/^[a-zA-Z0-9]+,[^\S\n]*[a-zA-Z0-9]+(?:\n[a-zA-Z0-9]+,[^\S\n]*[a-zA-Z0-9]+)*$/
参见regex demo。
详情:
-
^
- 字符串的开始 -
[a-zA-Z0-9]+
- 一个或多个字母数字字符 -
,
- 逗号 -
[^\S\n]*
- 除换行符之外的零个或多个空白字符 -
[a-zA-Z0-9]+
- 一个或多个字母数字字符 -
(?:
- 非捕获组匹配的开始-
\n
- 换行符,换行符 -
[a-zA-Z0-9]+,[^\S\n]*[a-zA-Z0-9]+
- 同上,一个单词、逗号、除 LF 之外的可选空格和一个单词
-
-
)*
- 小组结束,重复一次或多次 -
$
- 字符串结束。
特别感谢 Wiktor,感谢他在评论中的帮助,以及他之前在此 Angular Pattern answer 中的回答,这让我想起了我忘记的事情。 :) 他真的应该为此得到一些分数。
他在评论中的第二个正则表达式示例是完美的答案,然后,由于我使用字符串为模式提供常规名称,这是我的模式:
private multilinePairsCommaDelimitedWords = '[a-zA-Z0-9]+,[^\\S\\n]*[a-zA-Z0-9]+(?:\\n[a-zA-Z0-9]+,[^\\S\\n]*[a-zA-Z0-9]+)*';
以及我的验证器的最终使用:
this.firstFormGroup = this._formBuilder.group({
workstations: ['',[Validators.required,Validators.pattern(this.multilinePairsCommaDelimitedWords)] ],softDeleteDate: ['',Validators.required]
});