2016-10-21 8 views
1

Friends、 私の組織にはfirstname.Lastnameというテキストボックスがあります。 姓はかない姓Regex c#:電子メールの姓にハイフンを1つだけ含める

の終わりに)未姓 3の初めに)それは 1)一度だけ姓 2で、それが表示されます、含まhyphen.Ifを含んでも含まなくてもよいです(?!。{51})?: - $

(?[。] + [a-zA-Z]の)

私はこの正規表現は

^[a-zA-Z]の+を考え出しました

これには姓に " - "が含まれます。しかし、上記の条件を満たさない。

まだ正規表現を学習しており、これを理解する時間がかかります。

-Thankあなた

答えて

3

を助けてくださいあなたは、最後の名前部分の内側にもう一つのネストされたグループを追加する必要があります。

    ^(?!.{51})[a-zA-Z]+(?:\.[a-zA-Z]+(?:-[a-zA-Z]+)?)?$ 
               ^^^^^^^^^^^^^^^ 
    

    regex demo

    詳細を参照してください。

  • ^ -
  • (?!.{51})文字列
  • の開始 - 文字列の要件ではありません以上50文字
  • [a-zA-Z]+ - 1+ ASCII文字
  • (?:\.[a-zA-Z]+(?:-[a-zA-Z]+)?)? - のオプションのシーケンス:
    • \. - ドット
    • [a-zA-Z]+ - 1つ以上のASCII文字
    • (?:-[a-zA-Z]+)? - 任意のシーケンス:
      • - - ハイフン
      • [a-zA-Z]+ - 1+ ASCII文字
  • $ - 文字列の末尾。

    var pattern = @"^(?!.{51})[a-zA-Z]+(?:\.[a-zA-Z]+(?:-[a-zA-Z]+)?)?$"; 
    

    は、任意のUnicode文字を一致させる代わりに[a-zA-Z]\p{L}を使用するには:

はこのパターンを宣言するには、リテラル逐語的文字列を使用します。

+2

。ソリューションのための、しかし、説明すると、それは明確に私のような初心者には理解して作るためだけではありません。 – SaraDob

0

これは何とかクイックで汚い解決策です。

^(?!.{51})[a-zA-Z]+.{1}[a-zA-Z]{1,}-?[a-zA-Z]+$

文字列の最初の部分はまだあなたから使用されています。ちょうど完璧にマッチするようです。 私の追加.{1}[a-zA-Z]{1,}-?[a-zA-Z]+は、単純に次に何が起こるかを説明します。

  1. [a-zA-Z]{1,}ドットの後に少なくとも1 charackterがあることを確認しますので、ノー「 - 」初めのように記述することができます。

  2. -?だけが表示されることができることを説明し、「 - 」最初の文字の後にどこかが書かれています。

  3. [a-zA-Z]+だけで、ユーザーがのを好きなだけの文字が来るかもしれないと述べています。しかし、もう " - "はありません。あなたはありがとうThnak
関連する問題