Итак, я знаю, что мне понадобится регулярное выражение для этого, и использовать preg_match()
.Убедитесь, что строка содержит только цифры, буквы и символы подчеркивания с помощью PHP?
documentation for preg_match()
говорит, что функция вернет либо false, либо false-ish, если смещение длиннее длины строки. Я интерпретировал документацию как означающую, что она вернет false, если совпадений нет.
Я ужасен с регулярными выражениями, но после прочтения о них on this site Я попытался написать функцию, которая сделала то, что мне было нужно. Он не работает.
У меня есть следующий фрагмент кода:
if (preg_match('/^[a-zA-Z0-9_]+/', $requested_table_name) === false) {
echo "Invalid String";
} else {
echo "You're golden, Ponyboy";
}
Если я правильно понял, что обратные косые начало и конец регулярного выражения, карат говорит выражение, чтобы начать в начале строки. Класс символов говорит совпадение с символом, который представляет собой строчную букву, прописную букву, номер или знак подчеркивания, тогда символ +
говорит, что этот символ соответствует всей строке, а не только первый символ строки.
Я должен ошибаться, потому что вывод моей программы говорит, что строка действительна независимо от ввода.
Является ли проблема с моим кодом использованием функции preg_match()
или синтаксисом моего регулярного выражения? В любом случае, в чем конкретно проблема, и как ее исправить?
Использование якоря: '/^[a-zA-Z0-9 _] + $ /' – anubhava
Просто используйте '\ w +', '^ \ w + $' (с привязками для проверки полной строки). '\ w' - буквенно-цифровые символы и символы подчеркивания. http://www.regular-expressions.info/shorthand.html '\ w означает« символ слова ». Он всегда соответствует символам ASCII [A-Za-z0-9_] ' – chris85
@anubhava Это тоже не работает. – Allenph