Проверка на низ за валидни знаци

Приятели, може би вече го получих с въпроси :)

но - как можете да проверите низ за валидни знаци, т.е. знаците A-Z, a-z и долна черта са разрешени, останалите са забранени.

Отговорено: 25

Е, не знаете регулярни изрази, това е добре.

Има две опции: 1. разбирам (за щастие има милиони примери в мрежата) 2. направете го по правилния начин - итерирайте всички знаци от низа и проверете всеки един за валидност

знаците за началото и края на реда трябва да бъдат зададени, в противен случай редове като abc12345 ще преминат

Но не е вярно ;) /^[a-zA-Z_]+$/ , така или иначе. като.

по-лесно е да замените отрицанието в if

Някои от нас ядоха нещо. О_о

За изходния код:

  1. $string = "foobar" - условието ще бъде изпълнено (и правилно)
  2. $string = "foo#bar" - условието ще бъде изпълнено (и грешно)
  3. $string = "#!@" - условието ще се провали (и правилно)
Ако поставите отрицание ( if(!preg_match("/[a-zA-Z_]+/",$string)) < . >), то ще се изпълни само на 3 и 2, а 1 няма да се изпълни (е, обратното е). И получаваме същата глупост, само че отвътре навън, така или иначе няма да отдели правилното от грешното. Въпреки че не знам, може би забавям нещо, цял ден ми се спи някак -_-

И разбрах, че вътре в if'a има нещо, което трябва да работи, ако пасне, "премина теста" (тогава ще го хвърли на ръководството и ще излезе). Ако е обратното, да, това е отказ. Но все пак ще бъде неправилно да се провери, без ^ и $ няма да стане там, регулярният израз на самата крива.

Е, robyaty, много си направил, в PCRE има такова хубаво нещо като \w - всеки знак "дума", който включва само всяка буква или цифра или знака за подчертаване. И, готово, целият израз е сведен до абсурд: /^\w+$/ И (!) локалните знаци се поддържат, за разлика отпросто изброяване, аз обаче не правя скриптове за нашия роден език, но ръководството посочва възможността.

Ръководството за PHP казва следното: Знакът „дума“ е произволна цифра, буква или долна черта, с други думи всеки знак, който може да бъде част от „дума“ в Perl. Дефиницията на букви и цифри се контролира от символните таблици, с които е изграден PCRE. И в резултат на това тези комплекти могат да се различават в различни локализирани дистрибуции. Например в локала "fr" (Франция) някои знаци над 128 се използват за писане на ударени знаци и съответно съответстват на маската \w. Разбира се, не пропуснах да проверя какво ще произведе следният скрипт: И, разбира се, това е "FAILED!". Тези. или принудете всичко чрез setlocale или направете /^[A-Za-z_]+$/ без да натискате мозъка (можете /^[A-Z_]$/i , да. )

По-логично е от гледна точка на setlocal, по-удобно е при груба сила.

Кое е по-логично? Би било по-логично, ако беше написано "дума на английски". След това локалът, да. И имаме даден набор от букви (символи). Тогава, следователно, [a-z_] . Да, и издърпайте локала, същите тези функции за дата могат да бъдат победени, вече трябва да гледате, така че да не се случи нищо, което не се очаква.

Въпреки че това вече е по-скоро въпрос за holivars, отколкото истински проблем. ;)

А .. Е, те самите казаха - местни символи. И условието гласи в цвят на шрифта на фона - знацитеA-Z, a-z и долна черта са разрешени, останалитеса забранени.

Ами ако не посочите локала?

Чисто логично предполагам, че можете и просто да зададете английски ^___^

Глупаво е да сменяш локала заради една проверка. Тя не е създадена за това.

както разбирам, ако разрешите и числа, ще бъде: