I'm trying to write a custom validation function for jquery. The rule should be that the field cannot ONLY be numeric. I know how to write only numeric or only alpha but I want the rule to say that a value of "12345" would fail, but "12345A" would be validated
This is what I have for non numeric
jQuery.validator.addMethod("nonNumeric", function(value, element) {
return this.optional(element) || !value.match(/[0-9]+/);
},"Only alphabatic characters allowed.");
but I can't figure out how to do not ONLY numeric.
Working script
Here are three rules that might be helpful, the last one is the one that answers this question.
jQuery.validator.addMethod("noSpace", function(value, element) {
return value.indexOf(" ") < 0 && value != "";
}, "No spaces please");
jQuery.validator.addMethod("alpha", function(value, element) {
return this.optional(element) || /^[a-z]+$/i.test(value);
},"Letters only please.");
jQuery.validator.addMethod("nonNumeric", function(value, element) {
return this.optional(element) || isNaN(Number(value));
},"String cannot be numeric");
I'm trying to write a custom validation function for jquery. The rule should be that the field cannot ONLY be numeric. I know how to write only numeric or only alpha but I want the rule to say that a value of "12345" would fail, but "12345A" would be validated
This is what I have for non numeric
jQuery.validator.addMethod("nonNumeric", function(value, element) {
return this.optional(element) || !value.match(/[0-9]+/);
},"Only alphabatic characters allowed.");
but I can't figure out how to do not ONLY numeric.
Working script
Here are three rules that might be helpful, the last one is the one that answers this question.
jQuery.validator.addMethod("noSpace", function(value, element) {
return value.indexOf(" ") < 0 && value != "";
}, "No spaces please");
jQuery.validator.addMethod("alpha", function(value, element) {
return this.optional(element) || /^[a-z]+$/i.test(value);
},"Letters only please.");
jQuery.validator.addMethod("nonNumeric", function(value, element) {
return this.optional(element) || isNaN(Number(value));
},"String cannot be numeric");
Share
edited Apr 13, 2012 at 0:54
Brian
asked Apr 12, 2012 at 22:41
BrianBrian
4,41814 gold badges63 silver badges105 bronze badges
2
- If I understand correctly, you want that the value contains at least on numerical and one alphabetical character? – Felix Kling Commented Apr 12, 2012 at 22:57
- No basically its for a username field, but I don't want users to type in an integer to try to mimic a userid. So it needs atleast one alphabetical char, it just can't be all numeric. – Brian Commented Apr 12, 2012 at 23:04
4 Answers
Reset to default 2Use parseInt
(which returns NaN if the operand isn't strictly a number) like this:
jQuery.validator.addMethod("nonNumeric", function(value, element) {
return this.optional(element) || !isNaN(parseInt(value));
},"Only alphabatic characters allowed.");
Don't use !=
in this case or you could wind up with this unpleasant situation.
According to Ken Browning's ment, parseInt
might not be appropriate here. Try this instead:
jQuery.validator.addMethod("nonNumeric", function(value, element) {
return this.optional(element) || !isNaN(Number(value));
},"Only alphabatic characters allowed.");
You can use
/[a-z]/i.test(value)
which returns true
if value
contains any letter between a and z.
The i
modifier makes the test case insensitive.
For more information about .test()
, have a look at the MDN documentation.
change your regular expression to this:
(/.*[a-zA-Z]+.*/)
on your code:
EDIT 1:
jQuery.validator.addMethod("nonNumeric", function(value, element) {
return this.optional(element) || value.match(/.*[a-zA-Z]+.*/);
},"Only alphabatic characters allowed.");
I think this regex should be enough
/[a-z]/i.test(value);
Usage
jQuery.validator.addMethod("nonNumeric", function(value, element) {
return this.optional(element) || !(/[a-zA-Z]/i.test(value));
},"Only alphabatic characters allowed.");