RangeValidator doesnt work as expected using specific date - asp.net

When I try to submit a specific date "20-10-2013" (international format: 2013-10-20"), rangevalidator throws the error message for invalid date
<asp:TextBox ID="txtDataInicial" runat="server" Width="55px"></asp:TextBox>
<asp:RangeValidator ID="rgvDtInicial" runat="server" ControlToValidate="txtDataInicial"
Display="Static" MinimumValue="01/01/1800" MaximumValue="31/12/9999" Type="Date"
ErrorMessage="A data inicial, deve ter o seguinte formato: DD/MM/AAAA"
ValidationGroup="Consultar"></asp:RangeValidator>
<asp:Button ID="btnConsultar" runat="server" Style="width: 150px;" Text="Consultar"
OnClick="btnConsultar_Click" ValidationGroup="Consultar" />
It works for dates like , "19-10-2013", "21-10-2013", "20-10-2014", "20-10-2012".
It just happens when I submit this date!
Does anyone know why?

Dates are culture-depended. Specify your culture declaratively in web.config or in a Page directive, or programatically.
Check this out: http://msdn.microsoft.com/en-us/library/bz9tc508(v=vs.100).aspx

Rangevalidator control front end code
This is the culprit of the error. Make sure the cultureinvariantvalues is set to false.
Ensure assigning the correct minimum & maximum date range at code behind.
This is to standardise our date comparison to culture="en-GB" which use "dd/mm/yyyy" independent of server localization setting. You may use the "en-US" and the format will be "mm-dd-yyyy".
http://chinteongtan.blogspot.com/2014_04_01_archive.html

Related

ASP.NET File Upload Validation

I have a requirement to do multiple validations on a file upload control. I have the following code for now:
<asp:Button id="btnUploadFile" class="ms-ButtonHeightWidth" runat="server" OnClick="UploadFile_Click" Text="Upload File"></asp:Button>
<asp:RequiredFieldValidator ID="InputFileValidator" ControlToValidate="InputFile" Text="You must specify a value for the required field" runat="server" />
I need to add this ^(?!..)(?!...)(?=.[^.]$)[^\"#%&:<>?\/{|}~]{1,128}$ Regex validation from here in addition to the required field validator. How do I do this?
UPDATE:
You could probably adapt the regex instead to allow for backslashes up to the filename and disallow them in the filename, but the complexity of such a beast would not likely be worth the time and effort to construct it.
Since the original regex was for validating a textbox where the user was typing a filename (and not a file input where the name is generated by the OS), I think the better course of action would be to use an <asp:CustomValidator> control instead and split the value on \ to get more easily parseable chunks.
The primary advantage of this approach is that you can break that complex regex down into multiple simpler (and more easily understood) regexes and test them one at a time against the filename.
<script type="text/javascript">
var validateFile = function validateFile(sender, args) {
'use strict';
var fileWithPath, //split on backslash
fileName = fileWithPath[fileWithPath.length - 1], //grab the last element
containsInvalidChars = /["#%&*:<>?\/{|}~]/g, //no reason to include \ as we split on that.
containsSequentialDots = /[.][.]+/g, //literal .. or ... or .... (etc.)
endsWithDot = /[.]$/g, // . at end of string
startsWithDot = /^[.]/g, // . at start of string
notValid = false, //boolean for flagging not valid
valid = fileName.length > 0 && fileName.length <= 128;
notValid = containsInvalidChars.test(fileName);
notValid = notValid || containsSequentialDots.test(fileName);
notValid = notValid || endsWithDot.test(fileName);
notValid = notValid || startsWithDot.test(fileName);
args.IsValid = valid && !notValid;
};
</script>
<asp:FileUpload ID="InputFile" runat="server" />
<asp:RequiredFieldValidator ID="rqfvInputFile" runat="server" ControlToValidate="InputFile" ErrorMessage="File is required"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="cstvInputFile" runat="server" ControlToValidate="InputFile" ClientValidationFunction="validateFile" ErrorMessage="File is not a sharepoint file"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button" />
One caveat to the above is that the filename chunks are split on \, which is not likely to be the path separator for Unix or Mac systems. If you need this to run on those clients as well, you'll likely have to split on either \ or / which you should be able to do with this:
var filePath = args.Value.split(/\\|\//g); //not tested.
ORIGINAL:
Add in an <asp:RegularExpressionValidator> control and set the ControlToValidate property to your file uploader control.
You can have as many validator controls as you like pointed towards a single input.
Just set the appropriate properties (such as the ValidationExpression in the <asp:RegularExpressionValidator>) and make sure the ControlToValidate property is pointed towards the input to validate.
Example:
<asp:Button id="btnUploadFile" class="ms-ButtonHeightWidth" runat="server" OnClick="UploadFile_Click" Text="Upload File"></asp:Button>
<asp:RequiredFieldValidator runat="server" ID="RequiredInputFileValidator" ControlToValidate="InputFile" Text="You must specify a value for the required field" />
<asp:RegularExpressionValidator runat="server" ID="RegexInputFileValidator" ControlToValidate="InputFile" ErrorMessage="Only valid SharePoint files are allowed."
ValidationExpression="^(?!..)(?!...)(?=.[^.]$)[^\"#%&:<>?\/{|}~]{1,128}$" />
You may also want to look into Validation groups

zipcode regular expression validation

I would like to have a regular expression validator for validating zip code. My zip code length varies up to 9 digits. User can enter either 5 or 9. I should valid if he enters 5 digits or 9 digits. Any thing other than that I would like to raise error.
I tried this expression
ValidationExpression="\\d{5}(-\\d{4})?$"
This is my design I am using rad controls
<telerik:RadMaskedTextBox Mask="#####-####" runat="server" ID="txtcontactZipCode"
Width="200px" ValidationGroup="contactValidation">
</telerik:RadMaskedTextBox>
<asp:RequiredFieldValidator runat="server" ID="rqrdcontactZipCode" ValidationGroup="contactValidation" Display="Dynamic"
ForeColor="Red" ControlToValidate="txtcontactZipCode" ErrorMessage="Zip Code is required"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="regexpcontactZipCode" runat="server" ControlToValidate="txtcontactZipCode"
ValidationGroup="contactValidation" Display="Dynamic" ForeColor="Red" ErrorMessage="Should be 5 or 9 Digits"
ValidationExpression="\\d{5}(-\\d{4})?$"></asp:RegularExpressionValidator>
But I am unable to valid if I enter as follows 11111-____
Can some one help me..
The issue is that your regular expression indicates the four digits must exist if you have the dash. Generally that would be okay but since you're using an input mask the dash always exists, even when it's only five digits. Try the following expression.
ValidationExpression="\d{5}-?(\d{4})?$"
You should only use \\ to escape when you're setting it through C# code-behind.
Use this...
ValidationExpression="\d{5}(-\d{4})?$"
If you were setting it through the C# in the background, then you would need \\d because \d would be considered to be a control character...
txtcontactZipCode.ValidationExpression = "\\d{5}(-\\d{4})?$";
This is unless you precede the string with #, in which case it could be done as...
txtcontactZipCode.ValidationExpression = #"\d{5}(-\d{4})?$";
What about :- [0-9]{5}(\-[0-9]{4})?
[0-9] Any number between 0 and 9, {5} = only 5 characters; Altarnativly \d depending on what you find easier to read.
( ) - Create a group
\-[0-9]{4} A Dash followed by 4 numbers
? Optional - Zero or One
Use this method:
public static boolean validateZip( String zip )
{
return zip.matches( "\\d{5}" );
}

Error in ValidationExpression when using in XSLT

My XSLT shows that there is error in the below line, but i could not figure it out
<asp:RegularExpressionValidator ID="validatorEmail{#id}" runat="server" Display="Dynamic" ControlToValidate="{#id}" ErrorMessage="username#domain.com"
ValidationExpression="^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))#((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})$" />
Error Message:
Expected token '}', found ','. ...+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2 -->,<-- }))#((([0-1]?[0-9]{1,2}|25[0-5]|... Forms.xslt
What is wrong with this?
In XSLT { and } are used to inject dynamic values in attribute value templates. You need to double them to escape them in your regular expression:
ValidationExpression="^(([\w-]+\.)+[\w-]+|([a-zA-Z]{{1}}|[\w-]{{2,}}))..."

How to use webdings character map in asp.net

I want to use webdings characters in .net application.
Does anyone know how to do this.
I tried using :
ASPX:
<asp:Label ID="lblSample" runat="server" Font-Names="Webdings" ></asp:Label>
CODE BEHIND:
lblSample.Text = "0x61"
But it doesn't displaying properly.
As can be seen in any ASCII table, character 0x61 is a lower case a.
You are trying to output the string "0x61" instead of a lower case a.
You should be doing this:
lblSample.Text = "a"

how to convert server time to local time

I have a problem with time
My server is in the USA and I'm in Denmark (Europa) and I would like to have my site show the time in my local time. How can I do that?
I try this
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
and it works, but it will only work when I'm in GMT+1 / UTC+1 and not when I'm in GMT+2 / UTC+2.
Is there another way of doing this - a simpler way of doing it?
The only way you should do it is as follows:
string zoneId = "Central European Standard Time";
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(zoneId);
DateTime result = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,tzi);
Console.WriteLine("Time is " + result + " in Denmark");
Using the TimeZoneInfo class is the only reliable way in .Net to convert to/from different timezones AND get proper DST conversions.
TimeZoneInfo.ConvertTimeToUtc(dtLocal,tzi) is the reverse converting from a local time to a utc time.
For the TimeZone Id strings, you can run the bit of code here...
foreach( var tz in TimeZoneInfo.GetSystemTimeZones() )
{
Console.WriteLine(tz.DisplayName + " is Id=','" + tz.Id + "'");
}
You can get the time off the server and do this.
DateTime myTimeGMT = ServerTime.ToUniversalTime();
This do this:
DateTime myTimeLocal = myTimeGMT.ToLocalTime();
The only restriction here is the computer you are on must be set to the time zone you are converting to.
In my experience, .NET has trouble converting between timezones when neither the 'From' time or the 'To' time are the local time zone.
I hope this helps.
I did the conversion to be displayed in a gridview using a template field.
<asp:TemplateField HeaderText="Last Activity">
<ItemTemplate>
<asp:Label ID="LastActivityLBL" runat="server" Text='<%# Convert.ToDateTime(Eval("LastActivityDate")).ToLocalTime() %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Login">
<ItemTemplate>
<asp:Label ID="LastLoginLBL" runat="server" Text='<%# Convert.ToDateTime(Eval("LastLoginDate")).ToLocalTime() %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
You can change your TimeSpan like--
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(3,0,0)).DateTime;
according to the time zone.

Resources