HTML Email Validation after the # - html

Is it possible to require a "." after the "#"?
The required validation only forces an email to have some content after the "#", but I would like to require a "." to make the user type in ".com/.org/etc"
http://jsfiddle.net/X6Uuc/333/

If you're relying on the input[type=email] you can also use the pattern attr:
I got theRegEx in the example below from the W3C spec for the email input. The native pattern uses * in the last part then it's not required, I only changed it to +;
<form>
<input type="email" pattern="^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+#[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+$" required />
<button>Submit</button>
</form>

Related

HTML5 - Pattern attribute can't be used in input element

I'm currently having an input element for a phone number and trying to use the pattern attribute but it refuses to do so. it says "Validation(HTML5): Pattern is not a valid attribute of element input"! When I change the type to "text" it says that pattern attribute is only valid when title is present!
<input type="number" class="form-control"data-require="" id="Mobile" placeholder="Mobile No" autocomplete="off" pattern="[\+]\d{3}d{9}" required>
UPDATE:
I Added title attribute and it's working now! but my only issue is that when i click submit, it submits the form even though that the format is not matching.
The <input> should be valid without the title attribute (validated on https://validator.nu/):
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<input type="text" class="form-control" data-require="" id="Mobile" placeholder="Mobile No" autocomplete="off" pattern="[\+]\d{3}d{9}" required>
</body>
</html>
Additional changes:
A space is missing before attribute data-require.
The pattern attribute is only allowed on the following types: email, password, search, tel, text, or url.
Your regular expression ([\+]\d{3}d{9}) is also invalid. You can try one of the following rules:
[\+]\d{3}\d{9}
[\+]\d{12}
You are missing the \ before the second d to match only numbers. The second pattern is a minified version of the first pattern.
It's fixed, just added this in my javascript.
/[+]\d{3}d{9}/.test(PhoneNo)
You can add oninvalid attribute to the tag
<input type="text" name="HasAPattern" pattern="\w{3}" title="Enter 3 characters" oninvalid="setCustomValidity('Needs to match patern')" >
The HTMLSelectElement.setCustomValidity() method sets the custom validity message for the selection element to the specified message. Use the empty string to indicate that the element does not have a custom validity error.
You can also use code like event.preventDefault(); inside it to cancel the submit if invalid

HTML5 Email Validation TLD without Pattern?

How do I tell my input to validate email inputs with the tld?
I don't want to accept email addresses in the form a#b.
I am aware I can specify a regex pattern to assert this behaviour, but this feels like a hacky approach. Is there a native attribute I can use to force the input element to validate the email address, including tld?
<form>
<input type="email" required="required" pattern="^[^#\s]+#([^#\s]+\.)+[^#\s]+$" value="a#b" />
<input type="submit"/>
</form>
There isn't a native attribute to validate the TLD. You can use the pattern attribute to validate the TLD though. I have the copy and paste code snippet here: https://github.com/coliff/html5-email-regex

Can I add pattern attribute with input type as number?

Here I have a HTML5 input.....
<input type="number" pattern="\d{10}" data-pattern-msg="enter a value according to the pattern" />
But this is not validating this pattern ......
What is the reason for this ??
Maintainer of the W3C HTML Checker (validator) here. The reason the checker is emitting an error for your example is that the HTML spec doesn’t allow the pattern attribute to be specified for <input type=number> elements; see the The following content attributes must not be specified and do not apply to the element list in the Bookkeeping details section of the section on the HTML spec on <input type=number>.
And I’m not sure that most browsers support using placeholder with <input type=number>.
This is wrong type = "number" change to type="text" and try
<input type="text" pattern="\d{10}" data-pattern-msg="enter a value according to the pattern" title="only number" />
Definition and Usage
The pattern attribute specifies a regular expression that the element's value is checked against.
Note: The pattern attribute works with the following input types: text, search, url, tel, email, and password.
Tip: Use the global title attribute to describe the pattern to help the user.

HTML5 novalidate only for some inputs

I've got really simple question - is there any way to disable HTML5 validation only for some chosen inputs (instead of setting "novalidate" for whole form)?
I mean something like <input type='number' requirednovalidate>. But this doesn't work.
You may ask why I need type="number" or "required" then? Well, I need it there because my framework uses it for its own validation.
EDIT
It is about one special input - birth number. I need it to be of type number (because of mobile devices) but its value is mostly used with "/" (e.g. 860518/8757) which is not valid character for type number. So I need user to fill it without slash (8605188757). The problem is when there is invalid value filled in html5 input (e.g. "fsda" in number type), it seems like it is empty, with no value.
So when user fill the value in wrong format (860518/8757), html validation is disabled so the JS validation runs, it is validated like empty field. So the error message is like "Please fill the field birth number" (which is really confusing) instead somthing like "Sorry, wrong format".
My solution was to enable html5 validation for this field (so the default browser message is displayed when there is wrong format filled) but disable it for other fields so that they would be validated only with my JS validation.
You cannot disable HTML5 validation for a chosen input(s).
If you want to remove validation on the entire form you can use formnovalidate in your input element.
For example,
<input type="submit" value="Save" class="button primary large" formnovalidate/>
Note you can use formnovalidate with <input type=submit>, <inut type=image> or <button> -source
For more info go here or here.
novalidate attribute is only for form tag, it can't be applied on form controls.
You can remove the required attribute in js, after your framework validates:
$('[Selector]').removeAttr('required');​​​​​
Now the selected field will not be validated.
Inputs will be validate when:
have attr required or prop required=true
aren't empty; don't have to have attr required or prop required=true
and have no attr disabled or prop disabled=true
If you want to validate data in a specific way, use pattern attr.
JSFiddle
(function() {
document.querySelector('form').addEventListener('submit', function(event) {
event.preventDefault();
});
})();
<form>
1. <input type='text'><br>
2. <input type='text' required><br>
3. <input type='text' required disabled><br>
4. <input type='text' value="" pattern="\d*"><br>
5. <input type='text' value="" pattern="\d*" required><br>
6. <input type='text' value="" pattern="\d+"><br>
7. <input type='text' value="" pattern="\d+" required><br>
8. <input type='text' value="test" pattern="\d+" required disabled><br>
<button>check field validity</button>
</form>

Html5 pattern attribute not matching for email(user#gmail.com)

I am new to HTML5...
Here i am having some problem with email pattern attribute...
1)if i am giving the input like user#gmail.com... in email field..
2)it's not accepting value and showing "Pattern not matched"..
Help me to fix this....
Here is the snippet of Html
<form name='f1' method="POST" action="" >
<div id="fp">
<span style="margin-left:-50px">Email:</span>
<span><input class="input" type="email" name="Email" placeholder="Enter mailID" required pattern="^[A-Z0-9._%+-]+#[A-Z0-9.-]+\.[A-Z]{2,4}$" ></span><br>
<input type="submit" name="submit" value="submit">
</div>
</form>
Any suggestions are acceptable....
this should be correct pattern
[^#]+#[^#]+\.[a-zA-Z]{2,6}
yes you forgot to consider lower case.
you can refer this document for more details
html5-form-validation-with-regex
The accepted answer won't validate marian#iflove.technology
In this case not to miss out all those new domain names emails like http://www.iflove.technology/ you could use:
[^#]+#[^#]+\.[a-zA-Z]{2,}
Used with input type email it looks like this:
<input type="email" pattern="[^#]+#[^#]+\.[a-zA-Z]{2,}">
You need to account for lower cases too. Or make it case insensitive. But in reality you should just use:
^.+#.+$
And send a confirmation e-mail to the address that they should follow because e-mail addresses are reasonably complicated and you'll end up blocking stuff you don't intend to with a regex and it doesn't stop someone putting in a fake e-mail address anyway.
It is very difficult to validate Email correctly simply using HTML5 attribute "pattern". If you do not use a "pattern" someone# will be processed. which is NOT valid email.
Using pattern="[a-zA-Z]{3,}#[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}" will require the format to be someone#email.com
Simply remove the pattern attribute. The type="email" is enough.
I'm using this pattern right now, seems to work just fine:
[a-zA-Z0-9._\-]+#[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,4}
My solution to override html5 validation type='email'. I run this code after DOM loaded
$(document).ready(function(){
$('input[type=email]').attr('pattern', "^([\\w]+[\\.]{0,1})+#([\\w-]+\\.)+[\\w]{2,4}$").attr('type', 'text').attr('title', 'Please enter an email address')
})