簡體   English   中英

設置正則表達式的長度限制

[英]Set limit to length of Regular expression

該行應該是:

  • 從拉丁字母開始
  • 由拉丁字母,數字,點標志組成. 和減號-
  • 字符串應以字母數字結尾
  • 行的最小長度為1
  • 行的最大長度為20

我寫了以下正則Regex模式:

string pattern = @"^[A-Za-z]{1}[A-Za-z0-9\-\.]{1,18}[A-Za-z0-9]{1}$";

第三,第四和第五個條件不滿足:

string s1 = "E";   

// Compare a string against the regular expression
var isOK = new Regex(pattern).IsMatch(s1);

你能告訴我創建正則表達式模式的正確方法嗎?

您可以使用

string pattern = @"^[A-Za-z][A-Za-z0-9.-]{0,19}(?<=[A-Za-z0-9])$";

或者更強一些,因為它會因非匹配輸入而更快失敗,並且不會允許任何尾隨換行:

string pattern= @"^[A-Za-z][A-Za-z0-9.-]{0,19}\z(?<=[A-Za-z0-9])";

細節

  • ^ - 字符串的開頭
  • [A-Za-z] - 一封信
  • [A-Za-z0-9.-]{0,19} - 0到19個字母,數字或. -符號
  • (?<=[A-Za-z0-9]) - 之前應該有一個字母數字....
  • $ - 字符串的結尾(最好用\\z替換以匹配字符串的最后一端)

嘗試這樣的事情:

^[A-Za-z]([-.A-Za-z0-9]{0,18}[A-Za-z0-9])?$

它將首先匹配單個字母字符,然后選擇一系列最多18個字母,數字,句點或連字符,以字母數字結尾。 如果您願意,可以在字符類中轉義連字符,但如果不這樣做,則應將其作為類中的第一個字符,以使其不被解釋為范圍。 將連字符設為類中的最后一個字符適用於某些實現。

https://regex101.com/r/fA8lQ4/3

暫無
暫無

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

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