正则表达式特殊字符
本文关键字:特殊字符 正则表达式 | 更新日期: 2023-09-27 18:32:10
我有这个带有正则表达式的代码:
string lPattern = "''S*[a-zA-Z]+''S*";
System.Text.RegularExpressions.Regex lRegex =
new System.Text.RegularExpressions.Regex(lPattern);
if (!lRegex.IsMatch(phone))
{
return true;
}
我想让它,如果空间 x 空间 "x" 在字符串中,也会返回 true。我将如何更改此正则表达式以包含此表达式?谢谢!
显然,此代码试图通过匹配电话号码中的任何字母字符来验证电话号码 - 如果匹配,则电话号码无效。
因此,您希望除序列x
(空格 x 空格)之外的任何 alpha 字符(可选地嵌入在非空格字符中,尽管这些字符被列为可选字符,因此它们实际上无关紧要)匹配并触发失败。
这听起来像是你想接受人们在电话号码中嵌入分机的情况,如:123-123-1234 x 789
.*([a-zA-Z])+(?<! x).*
非常接近。
编辑:这使用负的后视结构。 (?<!
仅当从当前匹配位置开始,前面的字符与括号其余部分内的内容不匹配时,才允许正则表达式继续前进。 因此,如果有领先的x
它将失败比赛。
--
使用此正则表达式,以下内容不匹配:
- 123-123-1234
- 123-123-1234 转789
- 123-123-1234 x 789
但它确实匹配:
- 123-123A-1234
- 123-123 ASDFASDF 12312
- 123-123×123123
- 123-123 XFASDF
匹配的那些是无效的,因为你的 if 语句中的!
。
但话虽如此,如果你将电话号码验证写成积极的验证(即你允许什么),而不是消极的失效(你特别避免什么),你的代码会容易得多。 通过编写您允许的内容,您将能够更轻松地防止边缘情况。
例如,以下内容与两个正则表达式不匹配:
- 123-#
- ##-1234 123-!$#&^(##^#*@#(
- !@&#(#-1234
这将从您的函数返回 true。 这是你真正想要的吗?
我强烈建议积极的验证,而不是消极的无效。
编辑:@Aprillion建议之前的链接问题:电话号码验证的综合正则表达式
这表明电话号码验证有多复杂(尤其是当您在 1 个国家/地区进行验证时)。 里面有很多好的建议,尽管这不是万能的总结。 我的倾向是在前端只允许数字(带有可选的自由注释字段)输入电话号码。
我还必须承认,它确实让我对积极验证的信心有所降低——特别是如果你必须处理任意的国际#。
很大程度上取决于OP的实际要求。
" x |''S*[a-zA-Z]+''S*"
还是我错过了什么?
string lPattern = @"^'s*[a-zA-Z]+'s*$";
// Start of string
// Zero or more white space
// Letters any case 1 or more
// Zero or more white space
// End of string
'S means anything other than whitespace
's is to match for whitespace
如果你想验证一个电话号码,我还建议扭转逻辑 - 即尝试找到一个有效的电话号码而不是无效的电话号码。限制你想要匹配的内容比考虑你想要拒绝的所有可能性更容易。
我会使用这个正则表达式:
('d+(?:-|'s)?)+(?:'s*x's*'d+)?
代码将变为:
string lPattern = @"('d+(?:-|'s)?)+(?:'s*x's*'d+)?";
System.Text.RegularExpressions.Regex lRegex = new System.Text.RegularExpressions.Regex(lPattern);
if (lRegex.IsMatch(phone)) return true;
如果这不是你所追求的,那么你必须提供一些背景。