/ / Wyrażenie regularne malezyjskiej tożsamości (IC) - jQuery - jquery, regex, jquery-validate

Wyrażenie regularne malezyjskiej tożsamości (IC) - jQuery - jquery, regex, jquery-validate

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 № 1

Musisz 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}$/