При попытке проверить поле имени, чтобы быть уверенным это - все альфа-символы или дефис или апостроф

if(!preg_match("/[a-zA-Z'-]/",$First)) { die ("invalid first name");}

вышеупомянутое только отмечает вход как недопустимый, когда поле является все числовым. комбинации букв и чисел передают хорошо. Некоторая справка здесь для newby. спасибо.

11
задан bernie 13 February 2010 в 20:35
поделиться

3 ответа

В этом случае лучше искать недопустимые символы, чем пытаться найти совпадение всех символов, как только появляется один недопустимый символ, поиск может завершиться и вернуть ошибку. Это более эффективно, чем постоянное сканирование всей строки.

if (preg_match("/[^A-Za-z'-]/", $First)) { die ("invalid first name"); }

^ внутри набора [] заставляет его соответствовать всему, что не входит в набор. и поскольку строка недействительна, если в ней есть хотя бы один недопустимый символ, нет необходимости в операторе повторения для набора.

Еще лучше было бы получить более полезное сообщение об ошибке

if (preg_match("/[^A-Za-z'-]/", $First, $Inv)) { die ("{$Inv[0]} not allowed in first name"); }
3
ответ дан 3 December 2019 в 03:04
поделиться

Управление версиями (a.k.a. контроль редакции).

Рассмотрите следующую проблему. Вы работаете над проектом с другим пользователем и предоставляете общий доступ к файлам. Вы оба потребность продолжить работать, скажем, «WhateverController.java». Это огромный файл, и вам обоим нужно его отредактировать.

Самый примитивный способ справиться с этим, это не редактировать файл одновременно, но тогда вы оба должны быть на одной странице. Когда у вас есть команда, особенно если команда состоит из десятков или сотен или тысяч (типично для проектов с открытым исходным кодом), это становится совершенно невозможным.

Старое примитивное «решение» этой проблемы должно было иметь механизм выдачи/сдачи на хранение. Когда вам нужно отредактировать файл, вы «извлекаете его», и файл заблокирован, чтобы никто не мог редактировать его, пока вы не разблокируете его, «вернув». Это делается через соответствующее программное обеспечение, например, захватывающий дух глупый кусок дерьма SourceSafe от Microsoft. Но когда люди забывают «вернуть файл», то никто больше не может редактировать этот файл, пока он используется. Затем кто-то уходит в отпуск или покидает проект по какой-то другой причине и результатом становится непрекращающийся хаос, путаница и обычно совсем немного потерянного кода. Это добавляет огромную работу по управлению.

Затем появилась CVS, а впоследствии Subversion, которую авторы называют «CVS сделал правильно», так что CVS и Subversion по сути одна и та же идея. С ними, нет фактического выезда. Вы просто редактируете нужные файлы и возвращаете их. Следует отметить, что фактические файлы хранятся на центральном сервере, и каждый пользователь также запускает программное обеспечение на своих рабочих станциях. Это расположение на сервере называется репозиторием.

Что произойдет, если два человека работают с одним и тем же файлом в CVS/Subversion? Они объединяются, обычно с использованием GNU diff и patch. diff - это утилита, извлекающая разницу между двумя файлами. patch использует такие файлы diff для исправления других файлов.

Итак, если вы работаете с CharingController.java в одной функции, а я работаю с одним и тем же файлом в другой функции, то когда вы закончите со своими вещами, вы просто вернете его, и изменения будут применены к файлу на сервере. Между тем, моя локальная копия не имеет представления о ваших изменениях, поэтому ваши изменения вообще не влияют на мой код. Когда я закончу с изменениями, я также проверю файл. Но теперь мы имеем этот, казалось бы, сложный сценарий.

Давайте назовем оригинальный файл A DingleController.java. Файл редактируется, а результатом является файл B. Я редактирую один и тот же файл в другом месте, без ваших изменений, и этот файл является файлом C.

Теперь у нас, кажется, есть проблема. Изменения в файлах B и C являются изменениями в файле A. Поэтому в нелепо обратном мусоре, таком как SourceSafe или Dreamweaver, изменение файла B обычно переопределяется (потому что он был возвращен первым).

CVS/Subversion и предположительно Git (о которых я почти ничего не знаю) создают исправления вместо того, чтобы просто переопределять файлы.

Разница между файлами A и C создается и становится патчем X.Разница между A и B создается и становится патчем Y.

Затем патчи X и Y применяются к файлу A, поэтому конечным результатом является файл A + изменения, внесенные в B и C на наших соответствующих рабочих станциях.

Обычно это работает безупречно. Иногда мы можем работать над одной и той же функцией в одном и том же коде, и в этом случае CVS/Subversion уведомит программиста о проблеме и представит проблему в самом файле. Эти проблемы обычно легко устранить, по крайней мере, у меня никогда не было никаких проблем с их решением. Графические утилиты, такие как Visual Studio, Project Builder (Mac OS X) и такие обычно показывают вам как файлы, так и конфликты, так что вы можете выбрать, какие строки вы хотите сохранить и какие выбросить... а затем можно отредактировать файл вручную, если необходимо объединить конфликт вручную.

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

Надеюсь, это объясняет.

EDIT: Существует много других преимуществ с достойными системами управления версиями, такими как Subversion и предположительно Git. В случае возникновения проблемы можно вернуться к другим версиям, чтобы избежать необходимости в ручном резервном копировании всего. На самом деле, по крайней мере, с Subversion, если я что-то испортю или хочу взглянуть на старую версию кода, я могу сделать это, не вмешиваясь ни в чью работу.

-121--1873646-

Попробуйте:

if(!preg_match("/^[a-zA-Z'-]+$/",$First)) { die ("invalid first name");} 

^ соответствует началу последовательности, $ соответствует концу последовательности и + после того, как группа символов означает «один или несколько» соответствующих символов.

-121--2910283-

Выполняется сопоставление только одного символа. Необходимо добавить подстановочный знак, например, + (1 или более). Также вы совпадаете в любом месте последовательности. Необходимо добавить якоря ( ^ для начала последовательности, $ для конца последовательности), чтобы убедиться в отсутствии недопустимых символов.

if (!preg_match("/^[a-zA-Z'-]+$/", $First)) { die ("invalid first name");}

Также можно найти несоответствующий символ:

if (preg_match("/[^a-zA-Z'-]/", $First)) { die ("invalid first name");}

^ в квадратных скобках означает «любой символ, который НЕ является одним из них».

4
ответ дан 3 December 2019 в 03:04
поделиться

Попробуйте:

if(!preg_match("/^[a-zA-Z'-]+$/",$First)) { die ("invalid first name");} 

^ соответствует началу строки, $ соответствует концу строка и + после группы символов означают «один или несколько» совпадающих символов.

19
ответ дан 3 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: