для австралийской зоны с регулярным выражением требуется синтаксический анализ и методика проверки правильности

#java #php #javascript

#java #php #javascript

Вопрос:

Нам нужно реализовать проверку для следующего поля

Адрес улицы / бизнес-адрес

Условия, о которых необходимо позаботиться, следующие

Почтовый ящик, частная сумка НЕ принимаются в качестве адреса. Поле адреса не должно начинаться со следующего:

ПРИМЕЧАНИЕ: ^ = пробел

 G^P^O    
GPO^    
G.P.O    
GPO.    
G.P.O. Box

P^O    
P.O    
PO^    
PO.    
P.O.    
P.O.B    
POBOX    
POST BOX    
POST OFFICE BOX    
P / O Box    
P/O Box    
P O Box    
P.O. Box

BOX^    
BOX.    
Private Bag^    
Private Bag.    
Locked Bag
  

Этот список необходимо настраивать, чтобы разрешить включение дополнительных правил позднее. Нет необходимости проверять наличие верхнего / нижнего регистра

Можете ли вы предложить мне, что этот вид проверки может быть лучше реализован с использованием Javascript или Java?

  1. если я использую Java, целесообразно ли использовать класс регулярных выражений

  2. Если Javascript, каким должен быть мой способ

Пожалуйста, поделитесь своим примером кода, если у вас есть

Я проверяю, будет ли нам полезно использовать Regex для этого?

ps: Поскольку этот проект не может использовать какие-либо API Google или yahoo или любые другие платные API для анализа адреса улицы.

Комментарии:

1. почему вы отметили этот вопрос тегом ‘php’? Имеет ли php какое-либо значение здесь?

2. Я сомневаюсь, что есть одно регулярное выражение, которое охватывает все эти сценарии. Лучше всего, если вы используете несколько совпадений для одного или нескольких условий и вместо этого выполняете вложенные if-операторы.

3. Я также использую PHP при разработке

4. Вы хотите сделать это на стороне сервера или клиента? Я бы использовал Javascript на стороне клиента и php на стороне сервера (если это то, что вы используете на сервере)

Ответ №1:

Я бы не стал использовать regexp в этом случае. Вместо этого я бы поместил все «стоп-слова» в файл, прочитал его в набор и использовал цикл для проверки:

 public static boolean isValid(String address) {
  Set<String> stopWords = getSet();  // some magic to get the loaded set
  for (String stopWord:stopWords) {
    if (address.trim().toLowerCase().startsWith(stopWord.toLowerCase())) {
       return false;
    }
  }
  return true;
}
  

Большое преимущество: стоп-слова сохраняются в файле, а не компилируются в какое-то регулярное выражение, которое никто не поймет на следующей неделе или позже.

Ответ №2:

Я сам не гуру регулярных выражений, поэтому мой ответ будет длинным способом сделать это.

вы можете включить список возможных значений в регулярное выражение:

 /(GsPsO)|(GPOs)|(G.P.O)|(G.P.O.sBox)| .... and so one
  

Я не думаю, что это самый эффективный способ решения проблемы, но он все равно будет работать.