【发布时间】:2021-05-11 07:58:39
【问题描述】:
我正在编写一个以vocabulary word/phrase 作为输入参数的应用程序/逻辑。 我在为此参数的值编写验证逻辑时遇到问题!
以下是我想出的规则:
- 最多可包含 4 个单词(带或不带连字符)
- 允许使用一个撇号
- 只允许使用常规字母(不允许使用特殊字符,例如 !@#$%^&*()={}[]"";|/>/?¶ © 等)
- 不允许使用数字
- 不区分大小写
- 支持多种语言(英语、俄语、挪威语等)(因此必须同时支持 Unicode 和西里尔文)
- 整个字符串匹配或不匹配
几个例子(3 种语言):
// match:
one two three four
one-two-three-four
one-two-three four
vær så snill
тест регекс
re-read
under the hood
ONe
rabbit's lair
// not-match:
one two three four five
one two three four@
one-two-three-four five
rabbit"s lair
one' two's
one1
1900
鉴于上面提供的预期结果 - 有人可以为我指出如何创建这样的验证规则的正确方向吗?如果这很重要 - 我将在 C# 中编写验证逻辑,因此我可以使用的工具不仅仅是 Regex。
如果这会有所帮助 - 我一直在测试几种解决方案,例如 ^[\p{Ll}\p{Lt}]+$ 和 (?=\S*['-])([a-zA-Z'-]+)$。第一个正则表达式似乎做得很好,只允许我需要的字母(En、No 和 Rus),而第二个规则集在使用 Lookahead 概念方面做得很好。
-
\p{Ll}或\p{Lowercase_Letter}:带有大写变体的小写字母。 -
\p{Lu}或\p{Uppercase_Letter}:带有小写变体的大写字母。 -
\p{Lt}或\p{Titlecase_Letter}:当单词的首字母大写时出现在单词开头的字母。 -
\p{L&}或\p{Letter&}:以小写和大写形式存在的字母(Ll、Lu 和 Lt 的组合)。 -
\p{Lm}或\p{Modifier_Letter}:一个像字母一样使用的特殊字符。 -
\p{Lo}或\p{Other_Letter}:没有大小写变体的字母或表意文字。
不用说,我一直在测试的解决方案都没有考虑到我上面定义的所有规则..
【问题讨论】:
标签: c# regex regex-group