html pattern="[A-Za-z]{50}" is saying valid input is invalid - html

I have a page with some text fields and I would like to restrict user input, so I have used the html5 pattern attribute, like so:
<input name="team_name" type="text" pattern="[A-Za-z]{50}" value="<?php echo $team_name;?>">
This should allow me to enter only letters b/w Aa-Zz for a name, but when I try to enter a valid name, it still tells me to match the requested format.
What am I missing? How come it is always telling me that my input is invalid?

The rule [A-Za-z]{50} will make the name acceptable only when it contains exact 50 alphabets.
[A-Za-z]{10,50}
This will make the name minimum 10 and maximum 50 characters.
Update the expression according to your requirements.
Demo:
input:invalid {
color: red;
}
<form>
<input name="team_name" type="text" pattern="[A-Za-z]{10,50}" value="">
<br />
<input type="submit">
</form>

{50} in a regex pattern means exactly 50 characters. That's unlikely what you want.
If you want to restrict the input to maximum 50 characters, use the maxlength attribute.
<input name="team_name" type="text" pattern="[A-Za-z]+" maxlength="50">

As you can see in the following :
type="text" -> text validation happen.
pattern="[A-Za-z]{50}" -> only Aa - Zz alphabets are valid, character inputs are not valid. and string length should be equal to 50.

Related

Pattern attribute not working as expected?

So I'm trying to make a form for my assignment, and I am using the pattern attribute in html so only certain characters are required to be typed on the text box. But for some reason, the form is saying using that I'm using an incorrect format even though I made my pattern attribute that way.
Here's an example of the code and a picture of the problem.
<form>
<label for="mnumber">Mobile Number:</label>
<input type="text" required id="mnumber" pattern="[0-9]"><br><br>
<input type="submit" value="submit">
</form>
You did write:
pattern="[0-9]"
You are asking for only one number. You just forget to add '+' to accept more than one number. I guess what you are searching for is this:
pattern="[0-9]+"
pattern="[0-9]"
allows for only a single number character to validate (and be submitted). If you want to allow more than one character, here's your options:
One or more numbers:
pattern="[0-9]+"
Zero or more numbers:
pattern="[0-9]*"
One to three numbers:
pattern="[0-9]{1,3}"
you just need to change type="text" to type="number"

Set the exact number of elements required for an Input field with type number

I have a field input with type number in my form I would like to allow exact 13 characters to that field no less no more as per the requirement. I wanted to know is there any by default option in HTML using which I can accomplish this? I tried pattern and maxlength but for some reason they are ineffective with the type number. If it is not possible from HTML side then I would like to achieve the same using the angularjs. Any inputs would be really useful.
<input type="number" id="userCode" ng-model="formdata.userCode" title="13 Digit code"></input>
As per the below answer I added the min and max as 13. After adding it when I enter even 13 digits then also I get the error. Can someone please let me know what am I doing wrong here?
<input type="number" min="13" max="13" id="userCode" ng-model="formdata.userCode" placeholder="Enter 13 Digit Code" title="Please Enter the 13 digit code" class="form-control" style="width: 200px;" ng-required="true">
<form action="">
<input type="text" required pattern="[0-9]{13}" maxlength=13 id="userCode" ng-model="formdata.userCode" title="13 Digit code">
<input type="submit">
</form>
You can check here for some other attributes of input to play around with.
If anyone is looking they can also check this answer:
<input type="text" pattern=".{13,13}" oninput="this.value=this.value.replace(/[^0-9]/g,''); title="13 characters length required" ">
With this input field although its text we can make sure that it accepts only the numbers.

Regex number pattern and maxlength not working on IE

Number pattern and max length are not working on IE.
I have tried variations of the below HTML, though IE appears to bypass that validation.
<input id="phone" maxlength="10" minlength="10" pattern="[0-9.]+" type="text">
Any suggestions on enforcing the above on IE?
The goal is to only allow 10-digits for that input field.
You can use an <input type="tel"> element, but it actually allows you to enter any characters. So, ultimately you need to specify a pattern and be very explicit as to what you are looking for and rely on HTML5 form validation. For example, if you are trying to input a phone number of the format 999.999.9999, then you want a something like the following. If you enter something that does not match the pattern and try to submit the form by hitting enter, you will get an error indication. Of course, use whatever pattern you want. If you just want digits and decimal points in any order (why?) but they must be length 10, then use pattern="[0-9.]{10}".
<form>
<input type="tel" pattern="[0-9]{3}\.[0-9]{3}\.[0-9]{4}" required>
</form>

minlength attribute doesn't seem to be working

Say I have the following HTML:
<form>
Fax #: <input type="number" name="fax" minlength="10" required />
<button>Print</button>
</form>
If I enter in "11" as the Fax # and hit "Print" the form submits without issue. I would like it to present some sort of error. If the minlength attribute doesn't do that then what exactly does the minlength attribute do?
I'm using Google Chrome 74..
The minlength attribute doesn't apply for input of type number. This is actually quite reasonable. Numbers don't have a length, text do. For reference, see The official documentation.
Using input type="number" for a fax field is semantically incorrect, anyway. You should use input type="text". Then you can limit its length by the maxlength or minlength attributes or even use the pattern one.
If you absolutely need to use number as input type and you need to limit the value to 10 digits, you can do it by using min and max attributes:
Fax #: <input type="number" name="fax" min="1000000000" max="9999999999" required />
Like I said, though, this is absolutely incorrect semantically.

Pattern attribute is not working properly

I want a input box where it can only have alphabets and numbers with minimum number of letters of 4 and max of 20. To do this, I have the following code.
<input type="text" name="sample" pattern="[a-zA-Z0-9].{4,20}" />
This pattern attribute is preventing me from submitting the form. When I type something more than one letter, it tells me to match the required format.
What am I doing wrong? How can I have this form only take alphabets and numbers from 4-20 letters?
You are using the wildcard . in your pattern. It is what is being matched 4 to 20 times. Try
<input type="text" name="sample" pattern="[a-zA-Z0-9]{4,20}" />
Demo: http://jsfiddle.net/fwt2cj3o/