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