'-----------------------------------------------------------------------
'Creater : Rachitha Madusanka
'http://www.megazoon.com
'jewandara@gmail.com
'jewandara@hotmail.com
'Web Designer and Software Developer
'@ http://www.zionx.net16.net
'-----------------------------------------------------------------------
Function ValidEmail(ByVal strCheck As String) As Boolean
Try
Dim bCK As Boolean
Dim strDomainType As String
Const sInvalidChars As String = "!#$%^&*()=+{}[]|\;:'/?>,< "
Dim i As Integer
'Check to see if there is a double quote
bCK = Not InStr(1, strCheck, Chr(34)) > 0
If Not bCK Then GoTo ExitFunction
'Check to see if there are consecutive dots
bCK = Not InStr(1, strCheck, "..") > 0
If Not bCK Then GoTo ExitFunction
' Check for invalid characters.
If Len(strCheck) > Len(sInvalidChars) Then
For i = 1 To Len(sInvalidChars)
If InStr(strCheck, Mid(sInvalidChars, i, 1)) > 0 Then
bCK = False
GoTo ExitFunction
End If
Next
Else
For i = 1 To Len(strCheck)
If InStr(sInvalidChars, Mid(strCheck, i, 1)) > 0 Then
bCK = False
GoTo ExitFunction
End If
Next
End If
If InStr(1, strCheck, "@") > 1 Then 'Check for an @ symbol
bCK = Len(Left(strCheck, InStr(1, strCheck, "@") - 1)) > 0
Else
bCK = False
End If
If Not bCK Then GoTo ExitFunction
strCheck = Right(strCheck, Len(strCheck) - InStr(1, strCheck, "@"))
bCK = Not InStr(1, strCheck, "@") > 0 'Check to see if there are too many @'s
If Not bCK Then GoTo ExitFunction
strDomainType = Right(strCheck, Len(strCheck) - InStr(1, strCheck, "."))
bCK = Len(strDomainType) > 0 And InStr(1, strCheck, ".") < Len(strCheck)
If Not bCK Then GoTo ExitFunction
strCheck = Left(strCheck, Len(strCheck) - Len(strDomainType) - 1)
Do Until InStr(1, strCheck, ".") <= 1
If Len(strCheck) >= InStr(1, strCheck, ".") Then
strCheck = Left(strCheck, Len(strCheck) - (InStr(1, strCheck, ".") - 1))
Else
bCK = False
GoTo ExitFunction
End If
Loop
If strCheck = "." Or Len(strCheck) = 0 Then bCK = False
ExitFunction:
ValidEmail = bCK
Catch ex As ArgumentException
Return False
End Try
Return ValidEmail
End Function
s/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g
Тест:
$ echo 'getFoo_Bar' | sed -e 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g'
getFoo_bar
Несколько короче:
echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'
Если вы хотите написать все в нижнем регистре сразу после подчеркивания, то это будет работать для вас:
echo getFoo_Bar | gawk -F_ '{print tolower($2)}'
Вы можете использовать Perl для этого:
perl -pe 's/(get[A-Z][A-Za-z0-9]*)_([A-Z])/\1_\l\2/'
Здесь есть трюк \ l.
sed не выполняет прописные / строчные буквы в сопоставляемых группах.
Чтобы изменить getFoo_Bar на getFoo_bar, используя sed:
echo "getFoo_Bar" | sed 's/^\(.\{7\}\)\(.\)\(.*\)$/\1\l\2\3/'
Заглавные и строчные буквы обрабатываются с помощью:
\U
Делает весь текст правым верхним регистром. \u
делает только первый символ в правом верхнем регистре. \L
Делает весь текст правым нижним регистром. \l
Делает только первый символ в правом нижнем регистре. (Обратите внимание, что это строчная буква L) Пример - это всего лишь один метод для сопоставления с образцом, основанный только на изменении одного фрагмента текста. Используя пример, getFoo_BAr преобразуется в getFoo_bAr, обратите внимание, что буква A не была изменена.