Usando expressões regulares em aplicações FireMonkey com C++Builder

Vamos a outro exemplo em C++ onde demonstro como usar expressões regulares a partir da RTL em aplicações FireMonkey e C++Builder.

Este exemplo demonstra como validar um conteúdo a partir de uma string em quatro diferentes expressões regulares, que são:

  • Validar se a string enviada contém um endereço de e-mail
  • Validar se a string enviada contém um endereço de IP válido
  • Validar se a string enviada está no formato dd-mm-yyyy
  • Validar se a string enviada está no formato mm-dd-yyyy

O código a seguir mostra as quatro expressões regulares usadas por essa aplicação.

void __fastcall TForm1::lbRegExpChange(TObject *Sender) {
	switch (lbRegExp->ItemIndex) {
	case 0:
		lbType->Text = "E-mail for validation";

		MemoRegEx->Text =
			"^((?>[a-zA-Z\d!#$%&''*+\\-/=?^_`{|}~]+\\x20*" "|\"((?=[\\x01-\\x7f])[^\"\\\\]|\\\\[\\x01-\\x7f])*\"\\"
			"x20*)*(?\.?[a-zA-Z\d!" "#$%&''*+\\-/=?^_`{|}~]+)+|\"\"((?=[\\x01-\\x7f])"
			"[^\"\\\\]|\\\\[\\x01-\\x7f])*\")@(((?!-)[a-zA-Z\\d\\" "-]+(?)$";

		break;
	case 1: {
			// Accept IP address between 0..255
			lbType->Text = "IP address for validation (0..255)";
			MemoRegEx->Text =
				"\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\" ".(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\."
				"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b";
			break;

		}
	case 2: {
			// Data interval format mm-dd-yyyy
			lbType->Text =
				"Date in mm-dd-yyyy format from between 01-01-1900 and 12-31-2099";
			MemoRegEx->Text =
				"^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[" "01])[- /.](19|20)\\d\\d$";
			break;

		}
	case 3: {
			// Data interval format mm-dd-yyyy
			lbType->Text =
				"Date in dd-mm-yyyy format from between 01-01-1900 and 31-12-2099";
			MemoRegEx->Text =
				"^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[01" "2])[- /.](19|20)\\d\\d$";
			break;

		}
	}
	EditTextChangeTracking(EditText);

}

Para executar a validação, utilizamos o método TRegExp::IsMatch como demonstrado a seguir:
To execute the validation you can use the method TRegExp::IsMatch as you can see bellow:

void __fastcall TForm1::EditTextChangeTracking(TObject *Sender) {
       // EditText contain the string value and MemoRegEx the regular expression
	if (TRegEx::IsMatch(EditText->Text, MemoRegEx->Text)) {
		SEResult->ShadowColor = TAlphaColors::Green;
	}
	else
		SEResult->ShadowColor = TAlphaColors::Red;

}

Uma vez que este é um aplicativo FireMonkey, utilizei o efeito de sombra para demonstrar ao usuário se o valor informado no Edit é válido ou não (Verde = válido / Vermelho = inválido). A seguinte imagem demonstra o que irá acontecer caso o usuário informe um endereço de e-mail inválido no Windows e Mac.

Abaixo o resultado quando o usuário informar o endereço de e-mail válido.

Você pode baixar o código fonte  aqui ou atualizar a pasta de exemplos local do seu RAD Studio XE2 a partir do repositório do RAD Studio XE2 no SVN.

3 respostas

Trackbacks & Pingbacks

Deixe uma resposta

Want to join the discussion?
Feel free to contribute!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.