Вопрос о регулярном выражении Coldfusion

В настоящее время у меня есть регулярное выражение coldfusion, которое проверяет, является ли строка буквенно-цифровой или нет. Я хотел бы открыть это немного больше, чтобы разрешить точку и символы подчеркивания. Как бы я изменил это, чтобы разрешить это?

<cfset isValid= true/>
<cfif REFind("[^[:alnum:]]", arguments.stringToCheck, 1) GT 0>
 <cfset isValid= false />
</cfif>

Спасибо


person Paolo Broccardo    schedule 21.09.2010    source источник


Ответы (3)


Это должно сделать это.

<cfset isValidString= true/>
    <cfif REFind("[^[:alnum:]_\.]", arguments.stringToCheck, 1) GT 0>
    <cfset isValidString= false />
</cfif>

Также не рекомендуется использовать «isValid» для имени переменной. Это название функции в ColdFusion, которая когда-нибудь может вызвать у вас проблемы.

person Jason Dean    schedule 21.09.2010
comment
Спасибо, Джейсон, это работает как бомба. По крайней мере, теперь я могу добавить дополнительные символы, если это необходимо, используя символ \. Насчет "isValid" - вы правы на 100%. Первоначально это было «isAlphaNumeric», но я подумал, что это больше не будет соответствовать требованиям этого примера, поэтому я изменил его для этого примера онлайн, не задумываясь! - person Paolo Broccardo; 21.09.2010
comment
Вам не нужно \ перед ., а использование \w будет включать [A-Za-z0-9_] и встречается чаще, чем [[:alnum:]], поэтому вместо этого рассмотрите просто [^\w.]. - person Peter Boughton; 21.09.2010
comment
Привет Питер. И включая подчеркивания? Тогда это будет [^\w._] ? - person Paolo Broccardo; 21.09.2010
comment
\w включает подчеркивание. (Это все равно будет работать, если вы укажете это явно, просто в этом нет необходимости).) - person Peter Boughton; 21.09.2010
comment
Мне также нужно было разрешить пробелы, поэтому я просто изменил эту строку: <cfif REFind("[^[:alnum:] _\.]", arguments.stringToCheck, 1) GT 0> - person HPWD; 10.10.2011

Нет необходимости в cfif - вот хороший краткий способ сделать это:

<cfset isValidString = NOT refind( '[^\w.]' , Arguments.StringToCheck )/>


Кроме того, вы можете сделать это следующим образом:

<cfset isValidString = refind( '^[\w.]*$' , Arguments.StringToCheck ) />

(Чтобы не было пустой строки, измените * на +)

Этот метод может упростить применение других ограничений (например, должен начинаться с буквы и т. д.), и в любом случае является несколько более простым способом выражения исходной проверки.

Обратите внимание, что ^ здесь — это якорь, означающий «начало строки/строки» (где $ — соответствующий конец), больше информации здесь.

person Peter Boughton    schedule 21.09.2010
comment
Лично я предпочитаю писать a-z0-9 вместо \w, потому что это более наглядное представление, но хорошее объяснение. - person Ben Doom; 21.09.2010
comment
Разве это не должно быть <cfset isValidString = ( refind( '[^\w.]' , Arguments.StringToCheck ) EQ 0 ) />, иначе вы говорите, что он действителен, если он содержит символ другой, кроме буквенно-цифрового или точки. - person Jordan Reiter; 21.09.2010
comment
Спасибо, Джордан, я знал, что что-то не так, но явно не соображал - да, это должно было быть ( x EQ 0 ) - или просто поставить перед лотом префикс NOT, что опять же проще/понятнее. - person Peter Boughton; 21.09.2010
comment
Бен, если вам нужны только строчные буквы и цифры, то [a-z0-9] подойдет, но важно отметить, что \w — это [A-Za-z0-9_], и когда дело доходит до такой длины, я бы сказал, что \w дает более мгновенную ясность. - person Peter Boughton; 21.09.2010
comment
О, и полезно знать, что в некоторых реализациях регулярных выражений (но не в CF) \w может также включать символы с диакритическими знаками, такие как áèñôü... - если они желательны, то \w определенно проще, но, конечно, если они не требуется изложение, как указано выше. (За исключением Python, где есть флаг, который можно использовать в любом случае.) - person Peter Boughton; 21.09.2010

Будет ли это работать для вас?

refind("[\w\d._]","1234abcd._")
person Masterbuddha    schedule 21.09.2010
comment
\w уже включает \d и _, и вы пропустили, что Cheeky отрицает группу (чтобы идентифицировать недопустимые строки). - person Peter Boughton; 21.09.2010