Статические свойства недоступны в EL. Обходной путь, который я использую, заключается в создании нестатической переменной, которая присваивает статическое значение.
public final static String MANAGER_ROLE = 'manager';
public String manager_role = MANAGER_ROLE;
Я использую lombok для генерации getter и setter, так что это очень хорошо. Ваш EL выглядит так:
${bean.manager_role}
Полный код в http://www.ninthavenue.com.au/java-static-constants-in-jsp-and-jsf -el
Решение Swift версии 3:
if string.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil ...
Решение Swift версии 2:
if string.rangeOfString(pattern, options: .RegularExpressionSearch) != nil ...
Пример - содержит ли эта строка две буквы «о»? ]
Примечание. Если появляется сообщение об ошибке 'String' does not have a member 'rangeOfString'
, добавьте его перед: import Foundation
. Это связано с тем, что Foundation предоставляет методы NSString, которые автоматически соединяются с классом Swift String.
import Foundation
Спасибо Онно Эберхарду за обновление Swift 3.
В Swift 4.2 следующее не возвращает ноль, даже если строка не соответствует шаблону:
string.range(of: regex, options: .regularExpression, range: nil, locale: nil)
Как предполагает XCode:
Сравнение необязательного значения типа 'NSRange' (он же '_NSRange') с nil всегда возвращает true
Поэтому в итоге я использовал:
if string.range(of: regex, options: .regularExpression)
.location != NSNotFound {
// do stuff if string matches regexp
}
Упомянутые выше решения больше не работали для меня, поэтому я публикую свое решение здесь (я использовал расширение для String):
extension String {
func matches(_ regex: String) -> Bool {
return self.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil
}
}
Пример:
if str.matches("^[a-zA-Z0-9._-]{1,30}$") {
//...
}
Чтобы получить синтаксис, о котором вы на самом деле спрашиваете, вы можете легко определить новый оператор, который обернет функциональность NSString
моста:
infix operator =~ {}
func =~(string:String, regex:String) -> Bool {
return string.rangeOfString(regex, options: .RegularExpressionSearch) != nil
}
"abcd" =~ "ab*cd"
"abcd" =~ "abcde+"
Это вернет, соответствует ли строка шаблону
, например. matchPattern (text: "sd56Yz", pattern: "[a-zA-Z0-9] +") true
например. matchPattern (текст: "sd56 $ Yz", шаблон: "[a-zA-Z0-9] +") false
func matchesPattern(text: String?, pattern: String?) -> Bool {
guard hasValue(text) && hasValue(pattern) else {
return false
}
let range = text!.rangeOfString(pattern!, options: .RegularExpressionSearch)
guard range != nil else {
return false
}
let rangeString = text?.substringWithRange(range!)
return areEqual(text, string2: rangeString)
}