我有這個^[A-Z???a-z???\ \-]{2,50}$用于驗證名稱的正則運算式。我怎樣才能讓它只允許一個“-”。我希望它接受這樣的名稱:
Janet Smith-Johnson
Mary-Ann Johnson
Sara Mary John-Smith
Sara Johnson
Sara Mary Johnson
但它不能允許以 . 開頭-和結尾的名稱-。喜歡:
-Janet Mary
Mary-
uj5u.com熱心網友回復:
您可以使用
^(?=.{2,50}$)(?!(?:.*-){2})[A-Z???a-z???] (?:[- ][A-Z???a-z???] )*$
請參閱正則運算式演示。
如果您在 C# 中使用正則運算式或u在 JavaScript 中使用支持 ECMAScript 2018 標準的標志,您還可以將任何 Unicode 字母與\p{L}:
^(?=.{2,50}$)(?!(?:.*-){2})\p{L} (?:[- ]\p{L} )*$
詳情:
^- 字串的開始(?=.{2,50}$)- 允許在字串中包含 2 到 50 個字符(?!(?:.*-){2})(或(?!(?:[^-]*-){2})在實際代碼中更有效) - 不允許使用兩個連字符[A-Z???a-z???]- 集合中的一個或多個字母(\p{L}匹配任何 Unicode 字母)(?:[- ][A-Z???a-z???] )*- 零個或多個空格或-一個或多個字母的序列$- 字串結束。
uj5u.com熱心網友回復:
您可以匹配不帶空格的字符類,然后可選擇重復空格并再次使用不帶空格的字符類。
然后可選地-再次匹配和相同的機制。
^(?=.{2,50}$)[A-Z???a-z???] (?: [A-Z???a-z???] )*(?:-[A-Z???a-z???] (?: [A-Z???a-z???] )*)?$
部分中的模式匹配:
^字串的開始(?=.{2,50}$)斷言 2 - 50 個字符[A-Z???a-z???]匹配沒有空格的字符類中列出的內容(?: [A-Z???a-z???] )*可選地重復前面有空格的字符類(?:非捕獲組作為一個整體匹配-[A-Z???a-z???]匹配沒有空格的字符類中列出的內容(?: [A-Z???a-z???] )*可選地重復前面有空格的字符類
)?關閉非捕獲組并使其可選$字串結束
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/435512.html
標籤:javascript C# 正则表达式 验证
下一篇:Python資料驗證未按預期作業
