Try this one:
^(?:(?:add|delete|read|edit)|,)$
I used a group to limit the choices first to your individual strings, then the anchors ^
and $
to ensure there's nothing else in the string you're testing it against.
$words = array('add', 'delete', ',', 'reading', 'edit', 'read', 'gedit');
foreach ($words as $word) {
if (preg_match('#^(?:(?:add|delete|read|edit)|,)$#', $word)) {
echo "$word: Matched!\n";
} else {
echo "$word: Not matched!\n";
}
}