Mam to, co uważałem za poprawne wyrażenie regularne do sprawdzania malezyjskiej karty IC:
d {6} -d {2} -d {4} (tzn. liczby w formacie xxxxxx-xx-xxxx gdzie x to cyfra od 0-9)
Jednak po wstawieniu go do mojego jQuery w celu sprawdzenia poprawności nigdy nie pozwala mu przesłać formularza, mimo że został napisany we właściwym formacie.
Oto mój kod:
<script type="text/javascript">
$.validator.setDefaults({
submitHandler: function(form) {
form.submit();
}
});
$.validator.addMethod("regex", function (value, element, regexp)
{
var check = false;
var re = new RegExp(regexp);
return this.optional(element) || re.test(value);
}, "Please enter a valid ic number");
$(document).ready(function () {
// validate signup form on keyup and submit
$("#commentForm").validate({
rules: {
ic_no: {
required: true,
regex: "d{6}-d{2}-d{4}"
}
},
messages: {
ic_no: {
required: "Please input the IC number before searching.",
regex: "Please enter a valid ic number."
}
}
});
});
Nie jestem ekspertem ani w javascript, ani w wyrażeniach regularnych, ale myślałem, że to powinno działać, wszelkie wskazówki byłyby bardzo cenne.
Odpowiedzi:
4 dla odpowiedzi № 1Musisz uciec od ukośników w łańcuchach, które zostaną przekazane do RegExp
konstruktor:
regex: "\d{6}\-\d{2}\-\d{4}"
Polecam również dodanie do niego kotwic:
regex: "^\d{6}\-\d{2}\-\d{4}$"
W ten sposób uznasz "1234567-12-12345" za nieprawidłowy.
Aktualizacja
Alternatywnie możesz przekazać obiekt RegExp za pomocą dosłownego wyrażenia:
regex: /^d{6}-d{2}-d{4}$/