Проверьте, содержит ли Строка специальный символ

Я решил аналогичную проблему, создав пользовательскую страницу и применив канк-способность на этой странице. В противном случае эта возможность была применена к ресурсу.

ActiveAdmin.register_page "Summary" do
 menu parent: "UserProcess", label: "Summary"
  content title: "Summary" do
   .......
   .......
  end
end

и примените к нему способность следующим образом:

class Ability
 include CanCan::Ability
  def initialize(users)
   can :manage UserProcess
   cannot :manage, ActiveAdmin::Page, name: "Summary"
  end
end

Если вы нашли к тому времени другое чистое решение, пожалуйста, отредактируйте меня!

69
задан Paolo Forgia 17 January 2019 в 06:55
поделиться

7 ответов

Это тестируется в андроиде 7.0 до андроида 10.0, и он работает

, Используют этот код, чтобы проверить, содержит ли строка специальный символ и числа:

  name = firstname.getText().toString(); //name is the variable that holds the string value

  Pattern special= Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
  Pattern number = Pattern.compile("[0-9]", Pattern.CASE_INSENSITIVE);
  Matcher matcher = special.matcher(name);
  Matcher matcherNumber = number.matcher(name);

  boolean constainsSymbols = matcher.find();
  boolean containsNumber = matcherNumber.find();

  if(constainsSymbols == true){
   //string contains special symbol/character
  }
  else if(containsNumber == true){
   //string contains numbers
  }
  else{
   //string doesn't contain special characters or numbers
  }
0
ответ дан 24 November 2019 в 13:39
поделиться

Взгляните на класс java.lang.Character . В нем есть несколько методов тестирования, и вы можете найти тот, который соответствует вашим потребностям.

Примеры: Character.isSpaceChar (c) или ! Character.isJavaLetter (c)

7
ответ дан 24 November 2019 в 13:39
поделиться

Что именно вы называете «специальным символом»? Если вы имеете в виду что-то вроде «все, что не является буквенно-цифровым», вы можете использовать класс org.apache.commons.lang.StringUtils (методы IsAlpha / IsNumeric / IsWhitespace / IsAsciiPrintable).

Если это не так тривиально, вы можете использовать регулярное выражение, которое определяет точный список символов, который вы принимаете, и сопоставляет строку с ним.

9
ответ дан 24 November 2019 в 13:39
поделиться

Все зависит от того, что именно вы подразумеваете под «специальным». В регулярном выражении вы можете указать

  • \ W для обозначения не буквенно-цифровых
  • \ p {Punct} для обозначения знаков пунктуации

Я подозреваю, что вы имеете в виду последнее. Но если нет, используйте список [], чтобы точно указать, что вы хотите.

7
ответ дан 24 November 2019 в 13:39
поделиться

Сначала вам необходимо полностью определить специальные символы, которые вы хотите проверить.

Затем вы можете написать регулярное выражение и использовать

public boolean matches(String regex)
3
ответ дан 24 November 2019 в 13:39
поделиться
Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("I am a string");
boolean b = m.find();

if (b)
   System.out.println("There is a special character in my string");
116
ответ дан 24 November 2019 в 13:39
поделиться

Посещайте каждый символ в строке, чтобы увидеть, находится ли этот символ в черном списке специальных символов; это O (n * m).

Псевдокод:

for each char in string:
  if char in blacklist:
    ...

Сложность можно немного улучшить, отсортировав черный список, чтобы вы могли рано выходить из каждой проверки. Однако функция поиска строки, вероятно, представляет собой собственный код, поэтому эта оптимизация - которая была бы в байт-коде Java - могла бы быть более медленной.

1
ответ дан 24 November 2019 в 13:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: