簡體   English   中英

電話號碼的正則表達式-如何確保用戶不會輸入+-* +-* +-* +-*?

[英]Regex of phone number - how to make sure the user won't put +-*+-*+-*+-*?

我想允許用戶僅輸入以下模式:

+9720545455454

056565656345

03-43434344

0546-4234234

* 9090

+ 97203-0656534

意思是,我不想讓用戶將所有內容混為一談,例如:

+ 954-4343 + 3232 * 4343 +-

+ -4343- + 5454 + 9323 + 234

我該如何解決這個問題

public static bool IsPhoneNumberCorrect(string phoneNumber)
{
    return Regex.IsMatch(phoneNumber, @"^[0-9*+-]+$");
}

為了這個目的?

如果您不關心數字組的長度,則可以只在開頭允許+* ,然后匹配初始數字,然后匹配連字符+數字的可選組:

return Regex.IsMatch(phoneNumber, @"^[+*]?\d+(?:-\d+)*$");

觀看演示

請注意,您可以使用量詞限制連字符+數字的數量。 說,不能有一個或一個:

^[+*]?\d+(?:-\d+)?$"
                 ^

觀看另一個演示

如果可以超過1,請使用限制量詞:

^[+*]?\d+(?:-\d+){0,3}$"
                 ^^^^^

此處, {0,3}表示連字符+數字組的0、1、2或3個重復。

^(?!(.*\+){2})(?!(.*-){2})(?!(.*\*){2})[0-9*+-]+$

您可以lookaheads使用以確保special characters僅出現once參閱演示。

https://regex101.com/r/vV1wW6/1

您首先需要做的就是確定模式到底是什么。 不需要在代碼中。 在您的示例中,我看到一個前導字符,后跟第一個數字組,然后是可選的破折號和第二個數字組。 前導字符可以是+,*或0。數字組是1到9之間的一位數字,后跟一個或多個0到9數字。轉換每個元素將得到:

組長:[+ * 0]

破折號:-

號碼組:[1-9] [0-9] +

把所有東西都扔在一起

[\+\*0][1-9][0-9]+(-[1-9][0-9]+)?

某些組可能具有最小和最大長度,您仍然可以將+更改為{min,max}。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM