我有一个用JavaScript编写的脚本,用于使用Regex验证加拿大邮政编码,但它似乎不起作用。这是脚本:
如果声明:
if (myform.zip.value == "" || myform.zip.value == null || myform.zip.value == "Postal Code" || myform.zip.value.length < 12 ) {
alert("Please fill in field Postal Code. You should only enter 7 characters");
myform.zip.focus();
return false;
}
功能:
function okNumber(myform) {
var regex = /^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$/;
if (regex.test(myform.zip.value) == false) {
alert("Input Valid Postal Code");
myform.zip.focus();
return false;
}
return true;
}
答案 0 :(得分:5)
这适用于所有加拿大邮政编码..
^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$
答案 1 :(得分:3)
正则表达式方法可以验证format of a Canadian postcode,但仅保证邮政编码实际存在是不够的。
例如:A9A 0A0
看起来像一样有效的加拿大邮政编码,但正向排序区A9A
doesn't actually exist。
你确定不想对正式的邮政编码列表进行某种查询吗?
答案 2 :(得分:2)
以下是规则 http://en.wikipedia.org/wiki/Postal_code#Reserved_characters
ABCEGHJKLMNPRSTVXY <-- letter used
DFIOQU <-- letters not used because it mixes up the reader
WZ <-- letters used but not in the first letter
With that in mind the following in the proper regex
@[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][\s][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]
答案 3 :(得分:0)
第一个错误是初始if语句中的最后一个条件。 myform.zip.value.length < 12
应始终为true,因此代码的这一部分将始终提醒消息"Please fill in field Postal Code. You should only enter 7 characters"
并将焦点重新调回zip
字段。由于有效的邮政编码最多包含7个字符,因此应将其更改为myform.zip.value.length > 7
。
进行更正后,您在评论中提供的邮政编码T2X 1V4
会生效。但是,您使用的正则表达式可以简化(正如评论中也提到的那样)。您可以删除{1}
的所有实例,因为它们是多余的。您可能还希望使用?
而不是*
来跟踪空格。 ?
表示前一个字符或表达式可以显示0或1次,而*
表示它可以显示0或更多次。我认为您的邮政编码最多只需要一个空格。
这是我用以下方法测试的完整工作代码:
<!doctype html>
<html>
<head>
<title>JavaScript Regex Tester</title>
<meta charset="utf-8">
<script>
function validate(myform) {
if (myform.zip.value == "" || myform.zip.value == null || myform.zip.value == "Postal Code" || myform.zip.value.length > 7 ) {
alert("Please fill in field Postal Code. You should only enter 7 characters");
myform.zip.focus();
return false;
}
return okNumber(myform);
}
function okNumber(myform) {
var regex = /^[ABCEGHJKLMNPRSTVXY]\d[A-Z] *\d[A-Z]\d$/;
if (regex.test(myform.zip.value) == false) {
alert("Input Valid Postal Code");
myform.zip.focus();
return false;
}
return true;
}
</script>
</head>
<body>
<form action="#" name="myform" method="post">
<input type="text" name="zip" value="Postal Code" />
<input type="button" value="Submit" onclick="validate(document.myform);"/>
</form>
</body>
</html>
最后一点,通常当你在正则表达式中看到[A-Z]
时,至少应考虑是否[A-Za-z]
接受大写或小写字母是值得的。我不知道加拿大邮政编码是否属于这种情况,但通常情况是大多数表格都应接受输入并根据需要更正案例。
答案 4 :(得分:0)
这是我使用的加拿大邮政编码的有效表达。 它将严格格式化为A0A 0A0。
/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d$/
答案 5 :(得分:0)
这适用于加拿大邮政编码:
/^[a-z][0-9][a-z][- ]?[0-9][a-z][0-9]$/i
它将允许带有空格或连字符的正确X#X#X#格式。
答案 6 :(得分:0)
为您解答的解决方案,希望对您有所帮助。谢谢您的时间
string[] inputName = new string[5];
string[] inputId = new string[5];
string[] inputMarks = new string[5];
Regex StudentId = new Regex(@"\d\d\d\d\d$");
Regex Marks = new Regex(@"\d\d$");
Regex StudentName = new Regex(@"^([a-zA-z\s]{5,10})$");
private void btnClear_Click(object sender, EventArgs e)
{
rtShowAll.Clear();
}
private void btnAdd_Click(object sender, EventArgs e)
{
string Name = txtLastName.Text;
string id = txtStudentId.Text;
string marks = txtMarks.Text;
if ((Name == "") || (!StudentName.IsMatch(Name)))
{
MessageBox.Show("space cannot be empty and enter valid characters only");
}
else if (Name != "")
{
if ((id == null) || (StudentId.IsMatch(id)))
{
MessageBox.Show("Enter valid id");
}
else if ((id != null) || (StudentId.IsMatch(id)))
{
if ((marks == null) || (!Marks.IsMatch(marks)))
{
MessageBox.Show("enter valid marks");
}
else if ((marks != null) || (Marks.IsMatch(marks)))
{
for (int i = 0; i <= 5; i++)
{
inputName[i] = Name;
inputId[i] = id;
inputMarks[i] = marks;
break;
}
}
}
}
txtLastName.Clear();
txtMarks.Clear();
txtStudentId.Clear();
}
private void btnShowAll_Click(object sender, EventArgs e)
{
string result = "";
for (int i = 0; i <= 5; i++)
{
result = inputName[i] + " " + inputId[i] + " " + inputMarks[i];
rtShowAll.Text = result;
break;
}
//list.Add(rtShowAll.Text);
//string Showall = "";
// foreach (string s in list)
// {
// Showall += s + " "+ "\n";
//}
// rtShowAll.Text = Showall;
}
private void btnSearch_Click(object sender, EventArgs e)
{
string searchId = txtStudentId.Text;
string result = "";
txtStudentId.Text = searchId;
for (int i = 0; i < 5; i++)
{
if (searchId == inputId[i])
{
result = inputName[i] + " " + inputMarks[i];
rtSearch.Text = result;
}
else if (searchId != inputId[i])
{
MessageBox.Show("Enter valid Student id");
}
}
}
private void btnModify_Click(object sender, EventArgs e)
{
string id = txtStudentId.Text;
string newmarks = "";
for (int i = 0; i < 5; i++)
{
if (id == inputId[i])
{
newmarks = txtMarks.Text;
if ((newmarks == null) || (!Marks.IsMatch(newmarks)))
{
MessageBox.Show("enter valid marks");
}
else if ((newmarks != null || (Marks.IsMatch(newmarks))))
{
inputMarks[i] = newmarks;
MessageBox.Show("marks has been modified");
}
}
}
}
}
}