Převod telefonního čísla na slovo v ASP.NET
O možnostech převodu telefonního čísla na písmenný tvar jsme už jednou psali. V následujícím článku si ukážeme, jak téhož docílit v ASP.NET. Začátečníci si kromě toho mohou zopakovat práci s webovým formulářem, validátory a codebehind.
Vyjdeme ze staršího článku, kde se písmenné varianty telefonního čísla MSISDN (Mobile Station International ISDN Number – mezinárodní číslo stanice GSM v ISDN) generovaly v prohlížeči klienta pomocí JavaScriptu. Základem je převodní tabulka (pole), které obsahuje písmenné shluky pro odpovídající hodnoty kláves. Ve stránce dáme k dispozici formuláře s TextBoxem pro zadávání čísla k převodu a odesílací Button. Na pole TextBoxu navážeme validátory požadovaného vstupu (RequiredFieldValidator) a požadovaného formátu telefonního čísla (RegularExpressionValidator) – 1 až 6 numerických znaků. Hlášení validátorů jsou zahrnuta do prvku ValidationSummary, aby byla úhledně srovnána pod textovým polem.
Výsledek, tedy opis zadaného čísla, počet písmenných kombinací a vlastní varianty slov, jsou zobrazovány pod formulářem pomocí prvků Label. Jak vidíte z ukázky (podklady/1999-2008), výstup písmenných kombinací slov je uzavřen do DIVu s definovanou šířkou, výškou a vlastností overflow: auto
, díky čemuž se uživateli do stránky nevysype dlouhý seznam, ale může si pohodlně rolovat seznamem v přehledném boxu.
<%@ Page Language=“C#“ EnableViewState=“False“ EnableSessionState=“False“ Trace=“False“ Debug=“False“ Inherits=“MyPage“ CodeBehind=“MSISDN2Word.cs“ Src=“MSISDN2Word.cs“ %><?xml version=“1.0″ encoding=“utf-8″ ?>
<!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.0 Transitional//EN“ „http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=“http://www.w3.org/1999/xhtml“ xml:lang=“cs-CZ“ lang=“cs-CZ“ dir=“ltr“>
<head>
<meta http-equiv=“Content-type“ content=“text/html; charset=utf-8″ />
<meta http-equiv=“Content-script-type“ content=“text/javascript“ />
<meta http-equiv=“Imagetoolbar“ content=“no“ />
<meta http-equiv=“MSThemeCompatible“ content=“no“ />
<meta name=“Language“ content=“cs-CZ“ />
<meta name=“MSSmartTagsPreventParsing“ content=“true“ />
<title>Převod čísla na slovo</title>
</head>
<body>
<h1>Převod telefonního čísla MSISDN na slovo</h1>
<form Id=“frmNum2Word“ Paginate=“true“ Title=“Převod MSISDN na slovo“ RunAt=“server“>
<asp:TextBox Id=“txtNum“ Numeric=“true“ Size=“6″ MaxLength=“6″ RunAt=“server“ />
<asp:Button OnClick=“Translate“ Text=“Přelož“ RunAt=“server“ />
<asp:RequiredFieldValidator Id=“Validator1″ Display=“None“ ControlToValidate=“txtNum“ ErrorMessage=“Nezadali jste telefonní číslo“ RunAt=“server“ />
<asp:RegularExpressionValidator Id=“Validator2″ Display=“None“ ValidationExpression="^[0-9]{1,6}$" ControlToValidate=“txtNum“ ErrorMessage=“Telefonní číslo je neplatné“ RunAt=“server“ />
<asp:ValidationSummary FormToValidate=“frmNum2Word“ RunAt=“server“ />
</form>
<asp:Label Id=“lblNum“ Visible=“false“ RunAt=“server“ />
<asp:Label Id=“lblCountWords“ Visible=“false“ RunAt=“server“ />
<br /><br />
<div style=“width:180px;height:220px;overflow:auto;“>
<asp:Label Id=“ltrNumWords“ Visible=“false“ RunAt=“server“ />
</div>
</body>
</html>
Výše uvedený kód stránky je obsluhován kódem včleněným do souboru MSISDN2Word.cs, ve kterém je definována naše třída MyPage, ze které naše stránka dědí – jde o takzvaný CodeBehind, jak je vidět z direktivy stránky v prvním řádku.
using System;
using System.Text;
using System.Web;
public class MyPage : System.Web.UI.Page
{
private String [] dd = {„0“, „1“, „ABC“, „DEF“, „GHI“, „JKL“, „MNO“, „PQRS“, „TUV“, „WXYZ“};
private int CountWords = 0;
private StringBuilder StoreWords = new StringBuilder(String.Empty);
protected System.Web.UI.WebControls.Label lblNum;
protected System.Web.UI.WebControls.Label ltrNumWords;
protected System.Web.UI.WebControls.Label lblCountWords;
protected System.Web.UI.WebControls.TextBox txtNum;
void GenWords (String instr,String toStr)
{
if( instr.Length > 0 )
{
int a = Convert.ToInt16(instr.Substring(0,1));
for(int i=0; i<dd[a].Length; i++ )
{
GenWords( instr.Substring(1), toStr + dd[a].Substring(i,1));
}
}
else
{
StoreWords.Append(toStr + „<br />“);
CountWords++;
}
ltrNumWords.Text = StoreWords.ToString();
lblCountWords.Text = „Možností: “ + CountWords;
}
public void Translate (Object sender, System.EventArgs e)
{
if (!Page.IsValid)
{
lblNum.Visible = false;
ltrNumWords.Visible = false;
lblCountWords.Visible = false;
}
else
{
lblNum.Text = „Číslo: “ + txtNum.Text;
lblNum.Visible = true;
GenWords(txtNum.Text,String.Empty);
ltrNumWords.Visible = true;
lblCountWords.Visible = true;
}
}
}
Algoritmus je převzat z článku generujícího písmenné kombinace u klienta. V třídě MyPage máme definováno pole shluků kombinací písmen na klávesách, proměnnou pro počet kombinací, proměnnou určenou pro vypočtené písmenné kombinace a prvky webového formuláře, s kterými chceme programově manipulovat (Textbox a Labely). Obsluha události při odeslání formuláře Translate() ověří, zda neprotestují validátory – pokud ano, zneviditelní zobrazovací Labely a výpočet se nebude provádět. Pokud je stránka validní, nastaví se vlastnosti Text použitých Labelů na opis zadaného číslo, počet zjištěných kombinací a řetězec zjištěných možných kombinací znaků. Tyto kombinace vypočítává rekurzivní funkce GenWords, která prochází zadaný řetězec a přiřazuje postupně jednotlivé znaky ze shluků v poli dd[]
.
Všimněte si, že pokud používáte browser podporující DHTML, validace proběhne u klienta. Pokud není zadaný údaj validní, stránka se neodešle na server, nedojde k provedení obsluhy události funkcí Translate() a nedojde tedy k zneviditelnění Labelů s výstupními údaji. V naší aplikaci, kde zneviditelnění prvků při nevalidním vstupu provádíme jen pro urychlení renderování stránky, to nijak nevadí, v jiných aplikacích to může být na závadu, na což bychom měli brát zřetel.
Za zmínku zde stojí použití typu StringBuilder a jeho metody Append pro „naskládání“ výsledných kombinací i s elementem pro přechod na nový řádek (<br />
) do řetězce – tato je totiž přesně pro takovéto použití určena, a je tak mnohem rychlejší a operativnější než možná někoho svádějící String, do kterého bychom přidávali další obsah operátorem +
. Od předchozího článku se také liší parametry metody substring() – laicky řečeno, v JavaScriptu odkud-pokud, v C# odkud-kolik, což jsou drobnosti, které nás mohou zaskočit při úpravě algoritmu z jiného jazyka.
Mohlo by vás také zajímat
-
Netcat a Ncat
8. prosince 2022 -
Doména .io v ohrožení: Co přinese předání Čagoských ostrovů?
10. října 2024 -
inPage AI: Revoluční nástroj pro tvorbu webů
3. července 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024