'Максимальная длина обрабатываемых строк
Const SSNumberLength As Integer = 11
'-----------
'Конструктор
'-----------
Public Sub New
'Распределить память для нашего объекта StringBuilder и предоставить
'место для нескольких дополнительных рабочих символов по умолчанию
m_sb = New System.Text.StringBuilder(SSNumberLength + 5)
m_inputIsFullValidEntry = False
End Sub
'---------------------------------------------------------------------
'Форматировать поступающий текст с целью установления его соответствия
'нужному формату:
'
' Формат номера карточки социального страхования: ###-##-####
' символы: 01234567890
'
' [in] inString : Текст, который мы хотим форматировать
' [in/out] selectionStart: Текущая точка вставки в тексте;
' она будет смещаться в связи с удалением
' и добавлением нами символов
'----------------------------------------------------------------------
Private Function formatText_NNN_NN_NNNN(ByVal inString As _
String, ByRef selectionStart As Integer) As String
Const firstDashIndex As Integer = 3
Const secondDashIndex As Integer = 6
'Удалить старые данные и поместить входную строку
'в объект StringBuilder, чтобы мы могли с ней работать.
m_sb.Length = 0
m_sb.Append(inString)
'------------------------------------------------------------
'Просмотреть каждый символ в строке, пока не будет
'достигнута максимальная длина нашего форматированного текста
'------------------------------------------------------------
Dim currentCharIndex As Integer
currentCharIndex = 0
While ((currentCharIndex < m_sb.Length) AndAlso _
(currentCharIndex < SSNumberLength))
Dim currentChar As Char
currentChar = m_sb(currentCharIndex)
If ((currentCharIndex = firstDashIndex) OrElse _
(currentCharIndex = secondDashIndex)) Then
'-------------------------------
'The character needs to be a "-"
'-------------------------------
If (currentChar <> "-"c) Then 'Вставить дефис
m_sb.Insert(currentCharIndex, "-")
'Если мы добавили символ перед точкой вставки,
'она должна быть смещена вперед
If (currentCharIndex <= selectionStart) Then
selectionStart = selectionStart + 1
End If
End If
'Этот символ годится, перейти к следующему символу
currentCharIndex = currentCharIndex + 1
Else
'-------------------------
'Символ должен быть цифрой
'-------------------------
If (System.Char.IsDigit(currentChar) = False) Then
'Удалить символ
m_sb.Remove(currentCharIndex, 1)
'Если мы добавили символ перед точкой вставки,
'она должна быть смещена назад
If (currentCharIndex < selectionStart) Then
selectionStart = selectionStart - 1
End If