Как насчет случая, когда b1 == b2
? (И если a == b1
и a == b2
?)
Если это произойдет, то, вообще говоря, следующие два фрагмента кода могут иметь другое поведение:
if (a == b1) {
/* do stuff here, and break out of the test */
}
else if (a == b2) {
/* this block is never reached */
}
и:
if (a == b1) {
/* do stuff here */
}
if (a == b2) {
/* do this stuff, as well */
}
Если вы хотите четко очертить функциональность для разных случаев, используйте if-else
или switch-case
, чтобы сделать один тест .
Если вы хотите разную функциональность для нескольких случаев, используйте несколько if
блоков в качестве отдельных тестов .
Это не вопрос «лучших практик», так и для определения того, есть ли у вас один тест или несколько тестов.
каретка внутри символьного класса [^] - это оператор отрицания, общий для большинства реализаций регулярных выражений (Perl, .NET, Ruby, Javascript и т. д.). Поэтому я бы сделал это так:
[^\W\s\d]
Или вы можете воспользоваться другим подходом, просто включив только то, что вы хотите:
[A-Za-z]
Основное различие здесь в том, что первый будет включать символы подчеркивания. Это демонстрирует способ написания выражения в тех же терминах, в которых вы думаете. Но если вы измените свое мнение о включении символов, а не об их исключении, это иногда может привести к тому, что регулярное выражение будет легче читать.
Мне не совсем понятно, какие специальные символы вам не нужны. Но я выписал оба решения на тот случай, если одно вам подойдет лучше, чем другое.
и демонстрирует способ написания выражения в тех же терминах, что вы думаете. Но если вы измените свое мнение о включении символов, а не об их исключении, это иногда может привести к тому, что регулярное выражение будет легче читать.Мне не совсем понятно, какие специальные символы вам не нужны. Но я выписал оба решения на тот случай, если одно вам подойдет лучше, чем другое.
и демонстрирует способ написания выражения в тех же терминах, что вы думаете. Но если вы измените свое мнение о включении символов, а не об их исключении, это иногда может привести к тому, что регулярное выражение будет легче читать.Мне не совсем понятно, какие специальные символы вам не нужны. Но я выписал оба решения на тот случай, если одно вам подойдет лучше, чем другое.
В Perl это будет примерно так:
$string !~ /[\d \W]/
Конечно, это зависит от вашего определения «специальных символов». \ W
соответствует всем символам, отличным от слов. Символ слова - это любой алфавитно-цифровой символ плюс пробел.
Самое важное, что нужно знать о регулярных выражениях, - это не их синтаксис, а способность четко объяснить, что вы ищете. Это действительно 90% проблемы.
Кроме того, обычно лучше заявить, чего вы хотите, чем чего не хотите.