Утвердить канадский почтовый индекс Regex

У меня есть сценарий, написанный на 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;
}
 Marc B22 июн. 2012 г., 05:09
{1} дело бессмысленно.[] класс персонажа уже неявный{1} в любом случае., то же самое с\d и любая другая вещь, которая соответствует отдельным символам. Помимо этого, как это не работает? Вы проверили, что входные данные не имеют начальных / конечных пробелов?
 Li-aung Yip22 июн. 2012 г., 05:11
Каковы правила для действующего канадского почтового индекса? На каких тестовых входах это регулярное выражение терпит неудачу?
 Charlie22 июн. 2012 г., 05:10
Что является примером ввода и вывода? Или это не работает вообще
 kad8122 июн. 2012 г., 05:19
Я не вижу, чтобы okNumber вызывался где-либо в первом блоке кода ... этот код выполняется?
 Alex Block22 июн. 2012 г., 05:13
Не работает вообще. Пример действительного почтового индекса будет T2X 1V4

Ответы на вопрос(7)

это будет работать для всех канадских почтовых индексов ..

^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$

Подход регулярного выражения может подтвердитьformat of a Canadian postcode, но этого недостаточно для гарантии того, что почтовый индекс действительноexists.

Например:A9A 0A0 looks как действительный канадский почтовый индекс, но зона прямой сортировкиA9A на самом деле не существует.

Вы уверены, что не хотите искать какой-нибудь официальный список почтовых индексов?

 22 июн. 2012 г., 05:26
В этом случае что-то вроде^[A-Z]\d[A-Z][ ]?\d[A-Z]\d$ will work, Если это регулярное выражение не работает в вашей программе, у вас может быть логическая ошибка (истина вместо ложной?), Неправильный вызов кода регулярного выражения или его отсутствие вообще.
 Alex Block22 июн. 2012 г., 05:32
Это не работает. Попробуйте форму наdepressionnovascotia.com
 Alex Block22 июн. 2012 г., 05:25
Мне просто нужно проверить формат.

Вот правила 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]

Это будет делать для канадского почтового индекса:

/^[a-z][0-9][a-z][- ]?[0-9][a-z][0-9]$/i

Это позволит использовать правильный формат X # X # X # с пробелом или дефисом.

Решение для вас ответ, это поможет мне надеяться. Спасибо за ваше время

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");
                }
            }
        }
    }
}

}

 29 июн. 2018 г., 01:09
пожалуйста, объясните код, который вы написали для OP

Первая ошибка - это последнее условие в вашем начальном операторе if.myform.zip.value.length < 12 всегда должно быть истиной, поэтому эта часть вашего кода всегда будет предупреждать сообщение"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 илиmore раз. Я думаю, что вы хотите не более одного пробела в ваших почтовых индексах.

Вот полный рабочий код, с которым я это проверял:

<!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] принимать заглавные или строчные буквы. Я не знаю, относится ли это к канадским почтовым индексам, но, как правило, это тот случай, когда большинство форм должны принимать любой ввод и корректировать регистр по мере необходимости.

Это правильное выражение для канадского почтового индекса, который я использую. Он будет строго отформатирован как A0A 0A0.

/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d$/

Ваш ответ на вопрос